【PAT】B1020 月餅

2020-08-14 01:04:39

傳送門

在这里插入图片描述

輸入樣例:

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;
}