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

POJ 3628 Bookshelf 2【01背包】

时间:2015-02-18 00:57:30      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

题意:给出n头牛的身高,以及一个书架的高度,问怎样选取牛,使得它们的高的和超过书架的高度最小。

将背包容量转化为所有牛的身高之和,就可以用01背包来做===

技术分享
 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring>  
 4 #include<algorithm>
 5 #define maxn 2000005  
 6 using namespace std;
 7 int dp[maxn],h[50];
 8 int main()
 9 {
10     int n,b,i,j,sum=0,tmp=1000010;
11     scanf("%d %d",&n,&b);
12     for(i=1;i<=n;i++) 
13     {
14         scanf("%d",&h[i]);
15         sum+=h[i];
16     }
17     for(i=1;i<=n;i++)
18     {
19         for(j=sum;j>=h[i];j--)
20         {
21             dp[j]=max(dp[j],dp[j-h[i]]+h[i]);
22             {
23                 if(dp[j]>=b&&j<tmp)
24                 tmp=j;
25             }
26         }
27     }
28     printf("%d\n",tmp-b);    
29 }
View Code

 

POJ 3628 Bookshelf 2【01背包】

标签:

原文地址:http://www.cnblogs.com/wuyuewoniu/p/4295589.html

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