hdu 2191 hdu 2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 多重背包

来源:互联网 发布:spss数据差异性分析 编辑:程序博客网 时间:2024/06/05 11:32

题目大意:

有一定价值的背包去装不同重量的有数量限制的大米,问最多装多少重量的大米。。。。。。。。

解题思路:

赤果果的多重背包
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int m,n;int c[110],num[110],v[110];int dp[110],vis[110];void zero(int cost,int val){for(int j=m;j>=cost;j--)dp[j]=max(dp[j],dp[j-cost]+val);}void complete(int cost,int val){for(int j=cost;j<=m;j++)dp[j]=max(dp[j],dp[j-cost]+val); }void mul(){for(int i=0;i<n;i++){if(c[i]*num[i]>=m)complete(c[i],v[i]);else{int k=1;while(k<num[i]){zero(k*c[i],k*v[i]);num[i]-=k;k<<=1;}if(num[i])zero(num[i]*c[i],num[i]*v[i]);}}}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",&c[i],&v[i],&num[i]);mul();printf("%d\n",dp[m]);}}


0 0
原创粉丝点击