码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-03-22 22:06:47      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

  • 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背包)

标签:

原文地址:http://www.cnblogs.com/zstu-jack/p/5308544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!