HDU 6082 度度熊与邪恶大魔王(完全背包)
2017-10-14 18:58
351 查看
分析:n很大,但是怪物的防御力只到10.枚举一下防御力,然后对技能完全背包
dp[i][j]:防御力为j,生命力为i的最少晶石数
这个题主要是细节要注意感觉
dp[i][j]:防御力为j,生命力为i的最少晶石数
这个题主要是细节要注意感觉
#include <iostream> #include <cstring> #include <algorithm> #include <cmath> #include <vector> #include <cstdio> using namespace std; #define ll long long #define mem(a,b) memset(a,b,sizeof(a)) const int maxn = 100010; const ll inf = 1e15; ll dp[1005][15]; struct node { int cost,p; }mst[1005]; int a[maxn],b[maxn]; int main() { int n,m,maxx1=0,maxx2=0; while(scanf("%d %d",&n,&m)!=EOF) { mem(a,0);mem(b,0);mem(mst,0); for(int i=1;i<=n;i++){ scanf("%d %d",&a[i],&b[i]);maxx1=max(b[i],maxx1);} for(int i=1;i<=m;i++){ scanf("%d %d",&mst[i].cost,&mst[i].p);maxx2=max(mst[i].p,maxx2);} if(maxx2<maxx1) {printf("-1\n");continue;} for(int i=0;i<=1000;i++) for(int j=0;j<=10;j++) dp[i][j]=inf; for(int i=0;i<=10;i++) dp[0][i]=0; for(int k=0;k<=10;k++){//这里从0开始 for(int i=1;i<=m;i++) { if(mst[i].p<k) continue; for(int j=0;j<=1000;j++) { int t=j-(mst[i].p-k); if(t<=0) t=0; dp[j][k]=min(dp[j][k],dp[t][k]+mst[i].cost); } } } ll ans=0; for(int i=1;i<=n;i++){ ans+=dp[a[i]][b[i]]; if(ans>=inf) break;} if(ans>=inf) printf("-1\n"); else cout<<ans<<endl; } return 0; }
相关文章推荐
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- HDU 6082 度度熊与邪恶大魔王(完全背包)
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- HDU 6082 度度熊与邪恶大魔王(完全背包)
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- hdu 6082 度度熊与邪恶大魔王【完全背包】
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- HDU --- 6082 度度熊与邪恶大魔王 【完全背包】
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- HDU 6082 度度熊与邪恶大魔王 (完全背包)
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- HDU 6082 度度熊与邪恶大魔王(完全背包)
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- HDU 6082 度度熊与邪恶大魔王(完全背包)
- hdu 6082 度度熊与邪恶大魔王(完全背包)
- HDU 6082 度度熊与邪恶大魔王(完全背包)