輸入樣例:
3 20
18 15 10
75 72 45
輸出樣例:
94.50
首先選擇單價最高的月餅出售,可以獲得最大的利潤。
總需求量 D
雖然說是正整數,但爲了後面計算方便,需要設定爲浮點數,很多「答案錯誤」的程式碼都錯在這裏。
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1010;
struct mooncake {
// 庫存量、總售價、單價
double store, sell, price;
}cake[maxn];
bool cmp(mooncake a, mooncake b) { // 按單價從高到低排序
return a.price > b.price;
}
int main() {
int n; // 種類
double D; // 市場需求量
scanf("%d%lf", &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].sell);
cake[i].price = cake[i].sell / cake[i].store; // 計算單價
}
sort(cake, cake + n, cmp);
double ans = 0; // 收益
for (int i = 0; i < n; ++i) {
if (cake[i].store <= D) { // 庫存<需求,全部賣出
D -= cake[i].store; // 需求量-庫存
ans += cake[i].sell; // 加該部分的售價
}
else {
ans += cake[i].price * D; // 只賣出需求量的月餅
break;
}
}
printf("%.2f\n", ans);
return 0;
}