1020 月饼 (25 分)
题目:1020 月饼 (25 分)
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。
注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。
输入格式:
每个输入包含一个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。
输出格式:
对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后 2 位。
输入样例:
3 20 18 15 10 75 72 45
输出样例:
94.50
思路:
- 题目讲得看上去有点复杂,实际上思路很简单。
- 首先先好好读题,除了种类数n和市场最大需求量d说明是正整数外其他都是正数,对正数!不是正整数!!所以除了n和d外要全部设成浮点型,float或double。
- 看到这题要达到最大收益首先想到的就是单价高的先卖。所以先根据库存量和总售价出每个种类单价,然后对算出的单价进行降序排序。把单价大的总售价逐个求和,再判断该种类有没有卖完,若没有卖完减去多算的部分的钱,多算的钱就是没卖完剩下的库存的单价*剩下的库存。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <sstream> 5 #include <cmath> 6 #include <algorithm> 7 #include <string> 8 #include <stack> 9 #include <queue> 10 #include <vector> 11 #include <map> 12 using namespace std; 13 14 struct mooncake{ 15 double storage; 16 double tprice; 17 double mcp; //单价 18 }mc[1005]; 19 20 bool cmp(mooncake a, mooncake b) 21 { 22 return a.mcp > b.mcp; 23 } 24 25 int main() 26 { 27 int n,d; 28 double sum = 0; 29 double ans = 0; 30 scanf("%d%d", &n, &d); 31 for(int i = 0; i < n; i++) 32 scanf("%lf", &mc[i].storage); 33 for(int i = 0; i < n; i++) 34 scanf("%lf", &mc[i].tprice); 35 for(int i = 0; i < n; i++) 36 { 37 mc[i].mcp = mc[i].tprice / mc[i].storage; 38 } 39 sort(mc, mc + n, cmp); 40 for(int i = 0; i < n; i++) 41 { 42 ans += mc[i].storage; 43 // printf("ans = %lf\n", ans); 44 sum += mc[i].tprice; 45 // printf("sum = %.2lf\n", sum); 46 if(ans > d) 47 { 48 sum = sum - mc[i].mcp * (ans - d); 49 // printf("cha = %.2lf\n", ans - d); 50 // printf("sumflag = %.2lf\n", sum); 51 break; 52 } 53 } 54 printf("%.2lf\n", sum); 55 return 0; 56 }
总结:
第一个代码只设了一个最大收益的变量类型为double,后来一看题发现,除了种类数n和市场最大需求量d说明是正整数外其他都是正数,对正数!不是正整数!!于是就把其他变量重新设成了浮点型double,然而输入类型居然忘记改了!!发现后当场吐血身亡。。就因为这样测试程序的时候发现sum错的很离谱啊,还以为是下面的思路和代码实现哪里错了,调试了半天,一直纳闷,感觉对的很……直到后来看向输入函数……谁知我这么菜,思维这么弱,考虑的还不全面,很弱智就是了,感觉自己像极了酸菜鱼T^T。
以上说明了一点,思维模式偏弱、超级弱QAQ,及编程序时搭框架的锻炼还是不够,不管怎样,加油吧QAQ。