代码如下:
#include<bits/stdc++.h>
using namespace std;
struct data
{
int index;//堆数
int m;//质量
int v;//价值
int arvv;//平均价值
}coin[101];
bool cmp(data a,data b)
{
return (a.arvv>b.arvv);//降序排序
}
int main(void)
{
int i,n,pack,flag;
double taken;
flag=0;
taken=0;
scanf("%d",&n);
scanf("%d",&pack);//输入堆数、背包容量
for(i=0;i<n;i++)
{
scanf("%d",&coin[i].m);
scanf("%d",&coin[i].v);
coin[i].index=i+1;
coin[i].arvv=coin[i].m/coin[i].v;//输入每堆信息
}
sort(coin+1,coin+n+1,cmp);//按平均价值排序
for(i=0;i<n;i++)
{
if(pack>=coin[i].m)
{
taken=taken+(double)(coin[i].v);//容量大于质量,全拿
pack=pack-coin[i].m;
}
else
{
taken=taken+(pack*1.0/coin[i].m*1.0)*(coin[i].v*1.0);//容量小于质量,拿能拿的部分
flag=1;
}
if(flag==1)
{
break;//跳出循环
}
}
printf("%.2lf",taken);//结果
return 0;
}