HDU2191 多重背包
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 int main() 6 { 7 int i,j,k,ncases,n,m,num[110]; 8 int value[110],weight[110],f[110]; 9 10 scanf("%d",&ncases); 11 while( ncases-- ) 12 { 13 scanf("%d%d",&n,&m); 14 for(i=1; i<=m; i++) 15 { 16 scanf("%d%d%d",&value[i],&weight[i],&num[i]); 17 } 18 memset(f,0,sizeof(f)); 19 20 for(i=1; i<=m; i++) 21 for(k=0; k<num[i]; k++) 22 for(j=n; j>=value[i]; j--) 23 { 24 if(f[j] < f[j-value[i]]+weight[i]) 25 f[j] = f[j-value[i]] + weight[i]; 26 } 27 28 printf("%d\n",f[n]); 29 } 30 //system("pause"); 31 return 0; 32 }
和完全背包很相似,只是再转化为01背包时,多加了一冲循环。