HDU 2546 饭卡

http://acm.hdu.edu.cn/showproblem.php?pid=2546

依旧是0/1背包的问题。 只是 v,w相同。

View Code
 1 #include <iostream>
 2 #include <algorithm>
 3 #define maxn 1005
 4 using namespace std;
 5 int f[maxn],v[maxn];
 6 
 7 int main()
 8 {
 9     int n, m, i, j;
10     while(cin >> n, n)
11     {
12         for(i = 0; i < n; i++)
13          cin >> v[i];
14         sort(v,v+n); 
15         cin >> m;
16         if(m >= 5)
17         {
18             for(i = 0; i < maxn; i++)
19             f[i] = 0;
20             for(i = 0; i < n-1; i++)
21             for(j = m-5; j >= v[i]; j--)
22             if( f[j-v[i]]+v[i] > f[j] && f[j-v[i]]+v[i] <= m-5)
23               f[j] = f[j-v[i]] + v[i];
24             cout << m -v[n-1] - f[m-5] << endl;
25         }
26         else cout << m << endl;
27         
28     }
29     return 0;
30 }

 

posted @ 2012-08-29 17:12  YORU  阅读(184)  评论(0)    收藏  举报