这题本质上是贪心算法。
我们可以让 总售价和总库存做比值设为 k 这样我们就可以对其从大到小排序
假设我们总共要取n次月饼 还要保证总销售有最大值,我们可以这样做
我们先从最小的吨数r 拿起 ,还要保证r*k 还是比较大的 假设 还剩下月饼 继续枚举即可
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n;
double rr,d=0;
int a[N];
int b[N];
struct node{
double a,b;
bool operator<(const node &t)const
{
return b/a>t.b/t.a;
}
}c[N];
int main()
{
cin>>n>>d;
for(int i=0;i<n;i++)cin>>c[i].a;
for(int i=0;i<n;i++)cin>>c[i].b;
sort(c,c+n);
for(int i=0;i<n&&d>0;i++)
{
double r=min(d,c[i].a);
d-=r;
rr+=(c[i].b/c[i].a)*r;
}
printf("%.2lf",rr);
}