P2240 【深基12.例1】部分背包问题

题目链接 https://www.luogu.com.cn/problem/P2240

啥啊被骗了。。我还以为是dp。。。


 

将价值比算出来,并按照价值比从大到小排序。

(所有量用double类型,强转不对不知道为什么,一会儿去学学)


 

放AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct node
 4 {
 5     double m;//某堆总重量
 6     double v;//某堆总价值
 7     double b;//价值比
 8 }a[105];
 9 bool cmp(node x,node y)
10 {
11     return (x.b>y.b);
12 }
13 int main()
14 {
15     int n,t;
16     double ans=0;
17     cin>>n>>t;
18     for(int i=1;i<=n;i++)
19     {
20         cin>>a[i].m>>a[i].v;
21         a[i].b=a[i].v/a[i].m;
22     }
23     sort(a+1,a+n+1,cmp);
24     for(register int i=1;i<=n;i++)
25     {
26         if(t>=a[i].m)
27         {
28             ans+=a[i].v;
29             t-=a[i].m;
30         }
31         else
32         {
33             ans+=t*a[i].b;
34             break;
35         }
36     }
37     printf("%.2lf",ans);
38     return 0;
39 }

 

posted @ 2022-04-08 09:32  爱吃虾滑  阅读(49)  评论(0编辑  收藏  举报