HDU2191 多重背包

View Code
 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背包时,多加了一冲循环。

posted @ 2012-08-13 17:20  zhongya  阅读(119)  评论(0编辑  收藏  举报