#include<bits/stdc++.h>
using namespace std;
struct node
{
int w;
int money;
};
int main()
{
int n,m;
double sum=0;
cin>>n>>m;
node a[n];
for(int i=0;i<n;i++)
{
cin>>a[i].w>>a[i].money;
}
for(int i=0;i<n-1;i++)
{
for(int j=i;j<n;j++)
{
if((1.0*a[i].money/a[i].w)<(1.0*a[j].money/a[j].w))
{
swap(a[i],a[j]);
}
}
}
for(int i=0;i<n;i++)
{
if(m>0)
{
if(m>a[i].w)
{
sum=sum+1.0*a[i].money;
m=m-a[i].w;
}
else
{
sum=sum+(m*a[i].money*1.0)/(a[i].w*1.0);
m=m-a[i].w;
}
}
}
printf("%.2lf",sum);
}
部分背包问题(贪心算法)
最新推荐文章于 2024-05-22 21:55:29 发布