悼念512汶川大地震遇難同胞——珍惜現在,感恩生活(復習多重背包)
阿新 • • 發佈:2017-06-18
ems name clas ostream pre names 特點 生活 iostream
悼念512汶川大地震遇難同胞——珍惜現在,感恩生活
傳送門
【題目大意】
在資金一定的情況下,給出救難用的每袋大米的重量,價格,袋數。求購買大米的最終重量。
【思路】多重背包。
【復習】多重背包特點。
題目
有N種物品和一個容量為V的背包。第i種物品最多有n[i]件可用,每件費用是c[i],價值是w[i]。求解將哪些物品裝入背包可使這些物品的費用總和不超過背包容量,且價值總和最大。
【code】
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int t,mon,k,w[102],pri[102],f[102],cnt[102]; int main() { scanf("%d",&t); while(t--) { memset(f,0,sizeof(f)); scanf("%d%d",&mon,&k); for(int i=1;i<=k;i++) scanf("%d%d%d",&pri[i],&w[i],&cnt[i]); for(int i=1;i<=k;i++) { for(int j=mon;j>=pri[i];j--) { for(int h=0;h<=cnt[i];h++) { if(j-h*pri[i]<0)break; f[j]=max(f[j],f[j-h*pri[i]]+h*w[i]); } } } printf("%d\n",f[mon]); } return 0; }
悼念512汶川大地震遇難同胞——珍惜現在,感恩生活(復習多重背包)