【来源】
【分析】
为了获取最大的利润,首先把月饼按照单价从高到低排序,然后依次购买,到满足需求为止。
【源码】
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
struct mooncake
{
double stock;
double money;
};
bool compare(mooncake lhs, mooncake rhs)
{
return lhs.money / lhs.stock < rhs.money / rhs.stock;
}
int main()
{
int n, d;
cin >> n >> d;
vector<mooncake> cakes;
for (int i = 0; i < n; ++i){
mooncake mk;
cin >> mk.stock;
cakes.push_back(mk);
}
for (int i = 0; i < n; ++i){
cin >> cakes[i].money;
}
sort(cakes.rbegin(), cakes.rend(), compare);
double profit = 0;
for (int i = 0; i < n; ++i){
d -= cakes[i].stock;
if (d == 0){
profit += cakes[i].money;
break;
}
else if (d < 0){
d += cakes[i].stock;
profit += d * cakes[i].money/cakes[i].stock;
d = 0;
break;
}
else{
profit += cakes[i].money;
}
}
cout << setprecision(2) << fixed << profit << endl;
system("pause");
return 0;
}
【点评】
此题用到了贪婪思想,为较简单的模拟题。
这篇博客介绍了PAT考试中的一道题目——1020. 月饼,主要探讨如何通过贪婪算法来实现最大利润的月饼购买策略。博主详细分析了先按单价排序再依次购买的思路,并提供了相应的源代码实现。
&spm=1001.2101.3001.5002&articleId=21095375&d=1&t=3&u=7b036df1474642ba94c93fb75a94181c)
682

被折叠的 条评论
为什么被折叠?



