题目来源:团体程序设计天梯赛-练习集
题目地址:L2-003 月饼
题目大意
题目给定月饼种类的数量和市场最大需求量,以及各个种类月饼的库存量、总售价、,请你计算可以获得的最大收益!
题目分析
这是一道考察贪心策略的简单题目,首先求出各个种类月饼的单价(即亿元/万吨),然后按照单价将各个种类的月饼降序排序,优先把单价高的月饼卖出去,最后达到求得结果就是我们要的答案。
易错点:
- 题目中给的各个种类月饼的库存量、总售价描述是“正数”,相应的变量都应该用double类型存储。
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
/**
* 因为题目描述写这个属性是正数
* 故num, price都要用double类型
*/
struct Food {
double num, price;
double pri;
} f[maxn];
//按单价降序排序
bool cmp (const Food &A, const Food &B) {
return A.pri > B.pri;
}
int main()
{
int n, need;
scanf("%d %d", &n, &need);
for (int i = 0; i < n; i++) scanf("%lf", &f[i].num);
for (int i = 0; i < n; i++) {
scanf("%lf", &f[i].price);
f[i].pri = f[i].price / f[i].num;
}
sort(f, f + n, cmp);
double ans = 0.0;
for (int i = 0; i < n; i++) {
if (f[i].num < need) {
ans += f[i].price;
need -= f[i].num;
} else {
ans += need * f[i].pri;
break;
}
}
printf("%.2f\n", ans);
return 0;
}
如果觉得本对你有所帮助,记得点个赞哦~