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

hdu 2546 饭卡

时间:2014-07-31 23:45:10      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   for   问题   div   

 0-1背包问题

i = 1,扫所有上限价钱只购买一件物品的最大消费(price[1])

i = 2,更新一遍,此时是购买两件物品的最大消费(price[2])

以此类推~有n件物品

但是只进行到n-1,是因为最大的那件物品留至最后才减

价值最高上限为m-5

 1 #include<iostream>
 2 #include<memory.h>
 3 #include<algorithm>
 4 using namespace std;
 5 int price[1010];
 6 int f[1010];
 7 int main()
 8 {
 9     int n,m;
10     while(cin>>n && n)
11     {
12         memset(price,0,sizeof(price));
13         for(int j = 1; j <= n; j++)
14             cin>>price[j];
15         sort(price+1,price+n+1);
16         int Max = price[n];
17         cin>>m;
18         if(m < 5)
19         {
20             cout<<m<<endl;
21         }
22         else
23         {
24             memset(f,0,sizeof(f));
25             for(int i = 1; i <= n - 1; i++)
26                 for(int j = m - 5; j >= price[i]; j--)
27                     if(f[j] < f[j-price[i]] + price[i])//f[j]表示j元时,i件物品所需的最大值
28                         f[j] = f[j-price[i]] + price[i];
29             cout<<m-f[m-5]-Max<<endl;
30         }
31     }
32     return 0;
33 }

 

hdu 2546 饭卡,布布扣,bubuko.com

hdu 2546 饭卡

标签:style   blog   color   os   io   for   问题   div   

原文地址:http://www.cnblogs.com/imLPT/p/3883681.html

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