#include<iostream>
#include<algorithm>
using namespace std;
struct bag
{
int w;
int v;
double c;
} a[1001];
bool cmp(bag &a,bag &b)
{
if(a.c>=b.c)
return true;
else
return false;
}
double knapack(int n,bag a[],double c){
double cleft=c; //背包剩余容量
int i=0;
double value=0; //获得的价值
while(i<n&&a[i].w<cleft){
cleft-=a[i].w;
value+=a[i].v;
i++;
}
if(i<n) value+=1.0*a[i].v*cleft/a[i].w;
return value;
}
int main()
{
int w,v;
int n;
int c;
cin>>n>>c;
for(int i=0;i<n;i++){
cin>>w>>v;
a[i].w=w;
a[i].v=v;
a[i].c=v*1.0/w;
}
sort(a,a+n,cmp);
cout<<knapack( n,a, c);
return 0;
}
背包(贪心)
最新推荐文章于 2022-11-29 10:29:06 发布