1 8 2 2 100 4 4 100 2
400
思路:多重背包
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 105; int n,m; int p[MAXN],h[MAXN],c[MAXN]; int dp[MAXN]; int main(){ int t; scanf("%d",&t); while (t--){ memset(dp,0,sizeof(dp)); scanf("%d%d",&m,&n); for (int i = 0; i < n; i++) scanf("%d%d%d",&p[i],&h[i],&c[i]); for (int i = 0; i < n; i++){ int num = c[i]; for (int k = 1; num > 0; k*=2){ int Min = min(k,num); for (int j = m; j >= p[i]*Min; j--) dp[j] = max(dp[j],dp[j-p[i]*Min]+Min*h[i]); num -= Min; } } printf("%d\n",dp[m]); } }
HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活,布布扣,bubuko.com
HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
原文:http://blog.csdn.net/u011345136/article/details/21166379