题目来源html
月饼是中国人在中秋佳节时吃的一种传统食品,不一样地区有许多不一样风味的月饼。现给定全部种类月饼的库存量、总售价、以及市场的最大需求量,请你计算能够得到的最大收益是多少。ios
注意:销售时容许取出一部分库存。样例给出的情形是这样的:假如咱们有 3 种月饼,其库存量分别为 1八、1五、10 万吨,总售价分别为 7五、7二、45 亿元。若是市场的最大需求量只有 20 万吨,那么咱们最大收益策略应该是卖出所有 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,得到 72 + 45/2 = 94.5(亿元)。测试
每一个输入包含一个测试用例。每一个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。spa
对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后 2 位。code
3 20 18 15 10 75 72 45
这道题要求的是最大收益,给出月饼的种类和市场需求量,再给出它们的库存和总售价。htm
首先求出不一样月饼的单价,先计算单价最高的月饼(假定A的单价最大)blog
用一个结构体保存月饼的信息:月饼库存,总售价,单价排序
按照单价高低对月饼信息进行排序,获得单价最高的月饼ci
状况1:A类月饼总库存 > 市场最大需求量N,则最大收益 = A的单价 * 市场最大需求量get
状况2:A类月饼库存 < 市场最大需求量, 则A的收益 = A的单价 * 市场最大需求量
新的市场最大需求 = 市场最大需求量 减去 A的库存
而后再从单价第二大的计算收益,
最大收益 = 全部月饼收益
注意:库存用double类型,用int的话测试点2过不去
1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4 #include <cctype> 5 #include <vector> 6 #include <stack> 7 #include <climits> 8 #include <cstdio> 9 #include <numeric> 10 using namespace std; 11 12 typedef struct MoonCake { 13 double store; //月饼库存 14 double sell; //总售价 15 double unitPrice; //单价 16 }MoonCake; 17 18 bool myCmp(MoonCake a, MoonCake b) 19 { 20 return a.unitPrice > b.unitPrice; 21 } 22 23 int main() 24 { 25 int N; //月饼种类数 26 double D; //市场最大需求量 27 double result = 0; 28 cin >> N >> D; 29 vector<MoonCake> vecMoon(N); 30 for (int i = 0; i < N; ++i) 31 { 32 cin >> vecMoon[i].store; 33 } 34 for (int i = 0; i < N; ++i) 35 { 36 cin >> vecMoon[i].sell; 37 vecMoon[i].unitPrice = vecMoon[i].sell / vecMoon[i].store; 38 } 39 //按照单价高低排序 40 sort(vecMoon.begin(), vecMoon.end(), myCmp); 41 for (int i = 0; i < N; ++i) 42 { 43 if (vecMoon[i].store <= D) 44 { 45 //该种类月饼的库存小于市场最大需求 46 result = result + vecMoon[i].sell; 47 } 48 else 49 { 50 //库存大于市场需求 51 result = result + vecMoon[i].unitPrice * D; 52 break; 53 } 54 D = D - vecMoon[i].store; 55 } 56 printf("%0.2lf", result); 57 return 0; 58 }