首页 > 其他 > 详细

又见01背包

时间:2016-04-25 22:24:56      阅读:108      评论:0      收藏:0      [点我收藏+]
技术分享
 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cmath>
 4 using namespace std;
 5 int dp[10001];
 6 int v[105],w[105];
 7 int main()
 8 {
 9     int n,W,i,j,sum;
10     while(~scanf("%d%d",&n,&W))
11     {
12         sum=0;
13         for(int i=1;i<=n;i++)
14         {
15             scanf("%d%d",w+i,v+i);
16             sum+=v[i];
17         }
18         for(i=1;i<=sum;i++) dp[i]=1<<30;
19         dp[0]=0;
20         for(i=1;i<=n;i++)
21             for(j=sum;j>=v[i];j--)
22                 dp[j]=min(dp[j],dp[j-v[i]]+w[i]);
23         for(i=sum;i>=0;i--)
24             if(dp[i]<=W)
25         {
26             printf("%d\n",i);
27             break;
28         }
29     }
30     return 0;
31 }
View Code

感觉这题像是把递归的程序写成非递归的程序,写dp的程序太少,以后多练吧!

 

dp[i]代表i价值的最小重量.

又见01背包

原文:http://www.cnblogs.com/WDKER/p/5432751.html

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