poj 3628 Bookshelf 2

http://poj.org/problem?id=3628

01背包

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <algorithm>
 5 #define maxn 21
 6 #define ll long long
 7 using namespace std;
 8 
 9 ll h[maxn];
10 int n;
11 ll b;
12 ll dp[1000004];
13 ll max1(ll a,ll b)
14 {
15     return a>b?a:b;
16 }
17 
18 int main()
19 {
20     while(scanf("%d%lld",&n,&b)!=EOF)
21     {
22         ll v=0;
23         for(int i=1; i<=n; i++)
24         {
25             scanf("%lld",&h[i]);
26             v+=h[i];
27         }
28         for(int i=1; i<=n; i++)
29         {
30             for(ll j=v; j>=h[i]; j--)
31             {
32                 dp[j]=max(dp[j-h[i]]+h[i],dp[j]);
33             }
34         }
35         for(ll j=1; j<=v; j++)
36         {
37             if(dp[j]>=b)
38             {
39               printf("%lld\n",dp[j]-b);
40               break;
41             }
42         }
43     }
44     return 0;
45 }
View Code

 

posted @ 2014-09-23 18:51  null1019  阅读(101)  评论(0编辑  收藏  举报