悼念512汶川大地震遇难同胞――珍惜现在,感恩生活(hdu2191)
完全背包,用f[i]表示花费i费用时,能获得的最多粮食数目,
对于有k件的商品,我们吧一个商品看作k件完全相同的k件商品即可。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int n,t,m;
int p[200],w[200],num[200],dp[200];
//p是价格 w是重量 num是一共有这种大米一共有num袋
int main(){
cin>>t;
while(t--){//每袋大米的价格重量袋数
scanf("%d%d",&m,&n);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){
scanf("%d%d%d",&p[i],&w[i],&num[i]);
}
for(int i=1;i<=n;i++){
for(int k=1;k<=num[i];k++){
for(int j=m;j>=p[i];j--){
dp[j]=max(dp[j],dp[j-p[i]]+w[i]);
}
}
}
cout<<dp[m]<<endl;
}
return 0;
}