【多重背包】hdu 2191 买大米

来源:互联网 发布:淄博seo公司哪家好 编辑:程序博客网 时间:2024/04/29 15:02

http://acm.hdu.edu.cn/showproblem.php?pid=2191

分析:多重背包,不用装满

1)直接将多个暴力变为一个

#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int NM=205;int wei[NM],cost[NM],bag[NM],f[NM];int main(){int i,j,T,V,n,k;scanf("%d%",&T);while(T--){scanf("%d%d",&V,&n);for(i=1;i<=n;i++)scanf("%d%d%d",&cost[i],&wei[i],&bag[i]);memset(f,0,sizeof(f));for(i=1;i<=n;i++)for(k=1;k<=bag[i];k++)  //将不同个数转化为01背包for(j=V;j>=cost[i];j--){if(f[j]<f[j-cost[i]]+wei[i])f[j]=f[j-cost[i]]+wei[i];}printf("%d\n",f[V]);}return 0;}

原创粉丝点击