1070 Mooncake (25 分)
题目大意
题目大意:N表示月饼种类,D表示月饼的市场最大需求量,给出每种月饼的数量和总价,问根据市场最大需求量,这些月饼的最大销售利润为多少~
基本思路
首先根据月饼的总价和数量计算出每一种月饼的单价,然后将月饼数组按照单价从大到小排序,根据需求量need的大小,从单价最大的月饼开始售卖,将销售掉这种月饼的价格累加到res中,最后输出res即可
代码
#include <bits/stdc++.h>
using namespace std;
int n, need;//月饼种数,总需求
struct mooncake {
double price, num, singleprice;//总价,数量,单价
};
int cmp(mooncake a, mooncake b) {
return a.singleprice > b.singleprice;//单价大的放前面
}
int main() {
//读入数据
cin >> n >> need;
vector<mooncake> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i].num;
}
for (int i = 0; i < n; i++) {
cin >> v[i].price;
}
for (int i = 0; i < n; i++) {
v[i].singleprice = v[i].price / v[i].num;
}
//将结构体数组按照月饼的单价排序
sort(v.begin(), v.end(), cmp);
//进行售卖:从单价大的月饼开始售卖
double res = 0.0;
for (int i = 0; i < n; ++i) {
if (v[i].num <= need) {
res += v[i].price;
// need -= v[i].num;
} else {
res += need * v[i].singleprice;
break;
}
need = need - v[i].num;
}
//输出
printf("%.2lf", res);
}