#include <iostream>
#include <algorithm>
using namespace std;
int N;
double D;
struct Mooncake
{
double weight,price,oneWP;
}mooncake[1005];
int cmp(Mooncake a,Mooncake b)
{
return a.oneWP>b.oneWP;
}
int main()
{
scanf("%d%lf",&N,&D);
for(int i=0;i<N;i++)
scanf("%lf",&mooncake[i].weight);
for(int i=0;i<N;i++)
scanf("%lf",&mooncake[i].price);
for(int i=0;i<N;i++)
mooncake[i].oneWP=mooncake[i].price/mooncake[i].weight;
sort(mooncake,mooncake+N,cmp);
double nowWeight=0,money=0;
int index=0;
for(index=0;index<N&&nowWeight+0.000001<D;index++)
{
nowWeight+=mooncake[index].weight;
money+=mooncake[index].price;
}
if(nowWeight>D+0.000001)
money-=(nowWeight-D)*mooncake[index-1].oneWP;
printf("%.2lf",money);
return 0;
}
这题思路很简单,就是贪心。
注意:存货也要用double类型表示,否则第三个case过不去。