hdu 2191 悼念512同胞(0 1背包)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 2191 悼念512同胞(0 1背包)相关的知识,希望对你有一定的参考价值。

  • Input
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分别表示每袋的价格、每袋的重量以及对应种类大米的袋数。
 

 

  • Output
对于每组测试数据,请输出能够购买大米的最多重量,你可以假设经费买不光所有的大米,并且经费你可以不用完。每个实例的输出占一行。
 
Sample Input
1
8 2
2 100 4
4 100 2
 
Sample Output
400
 
与01完全背包不同的是这个多了  个 能选几袋以内
 
 1 int w[105],v[105],c[105],dp[105];
 2 int main(){
 3     int T;
 4     scanf("%d",&T);
 5     while(T--){        
 6         int W,n,ans = 0;
 7         memset(dp,0,sizeof(dp));
 8         scanf("%d%d",&W,&n);
 9         for(int i = 0 ; i < n ; i ++)    scanf("%d%d%d",&w[i],&v[i],&c[i]);
10         for(int i = 0 ; i < n ; i ++){
11 //            for(int j = w[i] ; j <= W ; j ++){    
12             for(int j = W ; j >= w[i] ; j --){    //倒着来 
13                 for(int k = 1 ; k <= c[i] ; k ++){
14                     if(j < k*w[i])    break;
15                     dp[j] = max(dp[j],dp[j-k*w[i]]+v[i]*k);
16                     if(dp[j] > ans) ans = dp[j]; //经费不用完,记录答案 
17                 }
18             }
19         }    
20         printf("%d\n",ans);    
21     }
22     return 0;
23 } 

 

以上是关于hdu 2191 悼念512同胞(0 1背包)的主要内容,如果未能解决你的问题,请参考以下文章

hdu 2191 悼念512汶川大地震遇难同胞 多重背包(模板题)

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

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

悼念512汶川大地震遇难同胞——珍惜现在,感恩生活--hdu2191(多重背包模板)

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

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