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