简单的贪心就可以了,每次优先选单价最大的月饼卖,直到达到最大需求
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cctype>
#include<queue>
using namespace std;
const int N=1000+10;
struct node
{
double num;
double val;
node(){}
node(double a,double b)
{
num=a;
val=b/a;
}
bool operator < (const node &u) const
{
return val>u.val;
}
}m[N];
double a[N],b[N];
int main()
{
int n,d;
scanf("%d%d",&n,&d);
for(int i=0;i<n;i++)
scanf("%lf",&a[i]);
for(int i=0;i<n;i++)
scanf("%lf",&b[i]);
for(int i=0;i<n;i++)
m[i]=node(a[i],b[i]);
sort(m,m+n);
double ans=0.0;
for(int i=0;i<n;i++)
{
if(d>=m[i].num)
{
d-=m[i].num;
ans+=m[i].num*m[i].val;
}
else
{
ans+=d*m[i].val;
break;
}
}
printf("%.2f\n",ans);
return 0;
}