本文主要是介绍hdu 2192 (二进制)多重背包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include<cstdio>
#include<cstring>
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)>(y)?(y):(x))
int dp[1000];
int w[125],v[125],m[125];
int main()
{int T;scanf("%d",&T);while(T--){int col,n;scanf("%d%d",&col,&n);for(int i=0;i<n;i++)scanf("%d%d%d",&w[i],&v[i],&m[i]);memset(dp,0,sizeof(dp));for(int i=0;i<n;i++){int num=m[i];for(int k=1;num>0;k<<=1){int mul=MIN(k,num);for(int j=col;j>=mul*w[i];j--)dp[j]=MAX(dp[j],dp[j-mul*w[i]]+mul*v[i]);num-=mul;}}printf("%d\n",dp[col]);}
}
这篇关于hdu 2192 (二进制)多重背包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!