思路
计算出每种月饼的单价,按照单价排序。
只要还有最贵的月饼,就卖最贵的,直到卖完。
老奸商了
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <queue>
using namespace std;
struct mooncake // 定义mooncake结构体,方便排序
{
double store;
double totalPrice;
double price;
}cake[1005];
bool cmp(mooncake a, mooncake b)
{
return a.price > b.price;
}
int main()
{
int n, d;
scanf("%d%d", &n, &d);
for (int i = 0; i < n; i++)
{
scanf("%lf", &cake[i].store);
}
for (int i = 0; i < n; i++)
{
scanf("%lf", &cake[i].totalPrice);
cake[i].price = cake[i].totalPrice/cake[i].store; // 计算单价
}
sort(cake, cake + n, cmp);
double res = 0;
for (int i = 0; i < n; i++)
{
// 若需求大于等于库存,则全部卖出
if (cake[i].store <= d)
{
d -= cake[i].store;
res += cake[i].totalPrice;
}
else
{
// 若需求小于库存,则卖出所需,结束循环
res += cake[i].price*d;
break;
}
}
printf("%.2lf\n", res);
return 0;
}