hdu--2546--dp<01背包>

距离上一篇 又过去2天了=-=

我发现 我最近开始忘记写 题目链接了  算了 以后 先写链接 省得忘记    touch  me

------------

这题 就是个01背包 只是多了一些 限制条件 但读题一定要注意啊..

我刚开始 没读清 一直WA...

当你的金额少于5元时 是不能购买任何东西的 卧槽....

我没仔细看它 ...

当你留意到它以后 只要多个判断条件就好了    然后因为只要有5元 就可以任意购买多少钱的物品 那肯定是去买 最贵的那就可以 在背包dp[x]的时候 将x设为m-5 因为5块钱已经被我们拿去买最贵的物品了

so 就这样..

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 
 6 const int size = 1010;
 7 int arr[size];
 8 int dp[size];
 9 
10 void zeroOne( int n , int m )
11 {
12     for( int i = 0 ; i<n ; i++ )
13     {
14         for( int j = m ; j>=arr[i] ; j-- )
15         {
16             dp[j] = max( dp[j] , dp[ j-arr[i] ] +arr[i] );
17         }
18     }
19 }
20 
21 int main()
22 {
23     int n , m , money , sum;
24     while( cin >> n && n )
25     {
26         memset( dp , 0 , sizeof(dp) );
27         for( int i = 0 ; i<n ; i++ )
28         {
29             cin >> arr[i]; 
30         }
31         cin >> m;
32         money = m;
33         if( m<5 )
34         {
35             cout << m << endl;
36         }
37         else
38         {
39             sort( arr , arr+n );
40             zeroOne(n-1,m-5);
41             cout << m-dp[m-5]-arr[n-1]<<endl;
42         }
43     }
44     return 0;
45 }
View Code

 

today:

  十二年 一个轮回 一部电影-----少年时代

 

posted @ 2014-08-18 12:31  radical  阅读(120)  评论(0)    收藏  举报