题目链接:
思路;首先要寻找到最高平均价格的月饼,然后再去寻找次高的,以此类推,注意每次卖了的月饼要算在需求量里面,需求量为0时就卖完了。
坑点:注意保留小数
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int amount;
int money;
double ave;
}w[1005];
bool cmp(node a, node b)
{
return a.ave > b.ave;//返回平均价格高的
}
int main()
{
int n,sum;
double summoney = 0;
cin>>n>>sum;
for(int i = 0; i < n; i++)
cin>>w[i].amount;
for(int i = 0; i < n; i++)
{
cin>>w[i].money;
w[i].ave = w[i].money*1.0 / w[i].amount;//计算平均价格
}
sort(w,w+n,cmp);//排序平均价格
int t = 0;
while(sum > 0)//如果需求量不够
{
if(sum > w[t].amount)
summoney += w[t].money;//先把最贵的卖了
else
summoney += sum * w[t].avemoney;
sum -= w[t].amount;//需求量要减去卖了的;
t++;//找下一个价格高的
}
printf("%.2lf",summoney);
return 0;
}