输入:
4 50
10 60
20 100
30 120
15 45
思路:
这道题因为金币是随意分割的,所以是很显然的贪心,依次把剩下的里面单位重量价值最高拿走就可以了
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
double ans,t;
struct GOLD
{
double m,v,a;
bool operator<(const GOLD &g1)const{
return a<g1.a;
}
}g[1111];
int main()
{
cin>>n>>t;
for(int i=1;i<=n;i++)
{
cin>>g[i].m>>g[i].v;
g[i].a=g[i].v/g[i].m;
}
sort(g+1,g+n+1);
//for(int i=1;i<=n;i++) cout<<g[i].m<<" "<<g[i].v<<" "<<g[i].a<<endl;
for(int i=n;i>=1;i--)
{
if(t>=g[i].m)
{
t-=g[i].m;
ans+=g[i].v;
}
else
{
ans+=t/g[i].m*g[i].v;
t=0;
}
//cout<<ans<<endl;
if(t==0) break;
}
printf("%.2f\n",ans);
return 0;
}