题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805301562163200
#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
struct MoonCake{
double num,totalp,singlep;//3个double型的库存量,总价,单价
}cakes[1000];
bool cmp(MoonCake a,MoonCake b)
{
return a.singlep>b.singlep;//设计函数以降序
}
int main()
{
int n,maxreq;//定义种类,最大需求量
cin>>n>>maxreq;
for(int i=0;i<n;i++)
cin>>cakes[i].num;
for(int i=0;i<n;i++)
cin>>cakes[i].totalp;
for(int i=0;i<n;i++)
cakes[i].singlep=cakes[i].totalp/cakes[i].num;
sort(cakes,cakes+n,cmp);
double maxbenf=0;
for(int i=0;i<n;i++)
{
if(maxreq<=cakes[i].num)//如果最大需求量不大于当前库存
{
maxbenf+=cakes[i].singlep*maxreq;//最大收益即当前单价乘以最大需求量
break;//注意及时退出
}
else
{
maxbenf+=cakes[i].totalp;//否则最大收益累加当前总价
maxreq-=cakes[i].num;//需求量减去当前库存
}
}
cout<<setiosflags(ios::fixed)<<setprecision(2)<<maxbenf;
return 0;
}