链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191
多重背包题目,转化为01背包求解
View Code
1 #include<stdio.h> 2 #include<string.h> 3 #define N 105 4 int a[N]; 5 int wei[N]; 6 int pri[N]; 7 int b[N]; 8 int max(int a,int b) 9 { 10 return a>b?a:b; 11 } 12 int main() 13 { 14 int t; 15 int n,m,i,j,k; 16 scanf("%d",&t); 17 while(t--) 18 { 19 scanf("%d%d",&n,&m); 20 for(i=0;i<m;i++) 21 scanf("%d%d%d",&pri[i],&wei[i],&b[i]); 22 memset(a,0,sizeof(a)); 23 for(i=0;i<m;i++) 24 for(j=0;j<b[i];j++) 25 for(k=n;k>=pri[i];k--) 26 a[k]=max(a[k],a[k-pri[i]]+wei[i]); 27 printf("%d\n",a[n]); 28 } 29 return 0; 30 }