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

部分背包问题

时间:2018-07-06 13:12:23      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:break   贪心   main   部分   code   ons   i++   处理   int   

每个物品都可以拿走一部分,要在不超重的情况下总价值最高,这应该是最简单的一类贪心问题了,思路很明显,考虑性价比即可,安装性价比排序,从高到低开始拿,除了最后一个物品之外,要么不拿,要么拿走全部,具体实现如下。请注意结果的细节,对最后一个物品的处理。

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=1005;
 5 int n;
 6 int C;
 7 int ans=0; 
 8 struct Object
 9 {
10     int w;  //weight
11     int v;  //value
12     double re;
13 }a[maxn];
14 bool cmp(Object x,Object y)
15 {
16     return x.re>y.re;
17 }
18 int main()
19 {
20     cin>>n;
21     for(int i=1;i<=n;i++)
22     {
23         cin>>a[i].w>>a[i].v;
24         a[i].re=a[i].v*1.0/a[i].w;
25     }
26     cin>>C;
27     sort(a+1,a+n+1,cmp);
28     int tmp=0;
29     for(int i=1;i<=n;i++)
30     {
31         tmp+=a[i].w;
32         if(tmp<=C)
33             ans++;
34         else
35             break;
36     }
37     cout<<ans<<endl;
38     return 0;
39 }

 

部分背包问题

标签:break   贪心   main   部分   code   ons   i++   处理   int   

原文地址:https://www.cnblogs.com/aininot260/p/9272908.html

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