#include<stdio.h>
#include<algorithm>
using namespace std;
#define SIZE 100
struct aa{
double w;
double v;
// bool operator<(aa& B){return (this->v)/(this->w)<B.v/B.w;}
}a[SIZE];
double x[SIZE];
bool comp(aa x,aa y){return x.v/x.w>y.v/y.w;}//按平均价从大到小排!!!
int main(){
int n;
double c;
while(scanf("%d%lf",&n,&c),n,c){
int i,j;
for(i=0;i<n;i++)
scanf("%lf%lf",&a[i].w,&a[i].v);
sort(a,a+n,comp);//按平均价格排序!!!
//贪心算法!!!
for(i=0;i<n;i++){x[i]=0.0;}
for(i=0;i<n;i++){
if(a[i].w>c) break;
x[i]=1.0;
c-=a[i].w;
}
if(i<n){x[i]=c/a[i].w;}
double sum=0.0;
for(j=i;j>=0;j--)
sum=a[j].v*x[j]+sum;
printf("%lf/n",sum);
}
return 0;}
部分背包问题模板
最新推荐文章于 2024-03-27 17:10:36 发布