首页 > 其他 > 详细

hdu2191(完全背包)

时间:2017-03-31 00:06:58      阅读:201      评论:0      收藏:0      [点我收藏+]

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191

完全背包:

 1 #include <iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 int t,n,m;
 6 int v[1110],w[1110],num[1110];
 7 int dp[1110];
 8 int main()
 9 {
10    cin>>t;
11    while(t--)
12    {
13         int ans=0;
14         cin>>n>>m;
15         for(int i=0;i<m;i++)
16         cin>>v[i]>>w[i]>>num[i];
17         memset(dp,0,sizeof(dp));
18         for(int i=0;i<m;i++)
19             {     
20                 int nu=num[i];         
21                 for(int k=1;nu>0;k*=2)    //二进制划分
22                 {
23                     int tmp=min(k,nu);
24                     for(int j=n;j>=tmp*v[i];j--)
25                     dp[j]=max(dp[j],dp[j-tmp*v[i]]+tmp*w[i]);
26                     nu-=tmp;
27                 }
28             }
29     for(int i=0;i<=n;i++)
30         ans=max(ans,dp[i]);
31     cout<<ans<<endl;
32    }
33 }

 

hdu2191(完全背包)

原文:http://www.cnblogs.com/yijiull/p/6649275.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!