hdu 2546饭卡

用5块钱去买最贵的物品,用剩下的m-5块去买尽量多的物品

 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<vector>
 4 #include<stdlib.h>
 5 #include<string.h>
 6 #include<iterator>
 7 #include<iostream>
 8 #include<algorithm>
 9 #include<set>
10 #include<map> 
11 using namespace std;
12 
13 int dp[3005],cost[3005];
14 
15 int main()
16 {
17     int n,money,max_cost;
18     while(scanf("%d",&n) && n!=0)
19     {
20         memset(cost,0,sizeof(cost));
21         memset(dp,0,sizeof(dp));
22         for(int i=1;i<=n;i++)
23             scanf("%d",&cost[i]);
24         scanf("%d",&money);
25         
26         sort(cost+1,cost+n+1);
27         
28         max_cost=cost[n];
29         
30         if(money<5)
31             printf("%d\n",money);
32         
33         else
34         {
35             for(int i=1;i<n;i++)       //----------注意是n-1因为最大的n已经取走 
36                 for(int j=money-5;j>=cost[i];j--)
37                     dp[j]=max(dp[j],dp[j-cost[i]]+cost[i]);
38             
39             printf("%d\n",money-max_cost-dp[money-5]);
40         }
41     }
42     return 0;
43 }

 

posted @ 2016-04-15 20:54  pter  阅读(123)  评论(0编辑  收藏  举报