题目链接
题意:
有一个固定承受重量的背包和一堆具有重量和价值的可分割物品,求最多能装多少价值的物品。
思路:
一道非常明显的贪心题(不知道为啥题目带背包),我们只需要将性价比最高的物品优先装入背包中即可。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=1e6+7;
const int mod=1e9+7;
const int inf=0x7fffffff;
const double pi=3.1415926535;
struct Node
{
int w,v;
}a[110];
bool cmp(Node aa,Node bb)
{
return aa.v*bb.w>aa.w*bb.v;
}
signed main()
{
int n,m;
cin>>n>>m;
double ans=0;
for(int i=1;i<=n;i++)
{
cin>>a[i].w>>a[i].v;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
if(a[i].w<=m)
{
ans+=a[i].v,m-=a[i].w;
}
else
{
ans+=a[i].v*m*1.0/(a[i].w*1.0);
break;
}
}
printf("%.2lf",ans);
return 0;
}