悼念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;
}