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

一开始没什么思路,想到求单价来计算,但是具体步骤没想出,看了柳神的代码后恍然大悟。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct mooncake {float mount;//存储数量float price;//存储总售价float unit;//存储单价
};
bool cmp(struct mooncake a,struct mooncake b)
{return a.unit > b.unit;
}
int main()
{int n;float number_max;//存储最大需求量float result=0;//存储最大收益cin >> n>>number_max;struct mooncake tmp;//建结构体vector<mooncake>v(n);for (int i = 0; i < n; i++)cin >> v[i].mount;for (int i = 0; i < n; i++)cin >> v[i].price;for (int i = 0; i < v.size(); i++)v[i].unit = v[i].price / v[i].mount;//计算单价sort(v.begin(), v.end(), cmp);//按单价降序排序for (int i = 0; i < n; i++) {if (v[i].mount <= number_max) {result = result + v[i].price;//如果该月饼数量小于当前最大需求,直接加上该月饼的总价。}else {result = result + v[i].unit * number_max;//如果大于当前最大需求,则需要求部分价格即可,然后跳出循环。break;}number_max = number_max - v[i].mount;//当前总需求减去卖出的月饼量。}printf("%.2lf", result);
}

C++学习之路 | PTA乙级—— 1020 月饼 (25分)(精简)相关推荐

  1. C++学习之路 | PTA乙级—— 1020 月饼 (25分)(带注释)(精简)

    1024 科学计数法 (20分) 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部 ...

  2. C++学习之路 | PTA乙级—— 1055 集体照 (25 分)(精简)

    1055 集体照 (25 分) 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任 ...

  3. C++学习之路 | PTA乙级—— 1045 快速排序 (25 分)(精简)

    1045 快速排序 (25 分) 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的 ...

  4. C++学习之路 | PTA乙级—— 1071 小赌怡情 (15 分)(精简)

    1071 小赌怡情 (15 分) 常言道"小赌怡情".这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计 ...

  5. C++学习之路 | PTA乙级—— 1064 朋友数 (20 分)(精简)

    1064 朋友数 (20 分) 如果两个整数各位数字的和是一样的,则被称为是"朋友数",而那个公共的和就是它们的"朋友证号".例如 123 和 51 就是朋友数 ...

  6. C++学习之路 | PTA乙级—— 1062 最简分数 (20 分)(精简)

    1062 最简分数 (20 分) 一个分数一般写成两个整数相除的形式:N/M,其中 M 不为0.最简分数是指分子和分母没有公约数的分数表示形式. 现给定两个不相等的正分数 N ​1 ​​ /M ​1 ...

  7. C++学习之路 | PTA乙级—— 1058 选择题 (20 分)(精简)

    1058 选择题 (20 分) 批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多. 输入格式: 输入在第一行给出两个正整数 N(≤ 1000)和 M(≤ 10 ...

  8. C++学习之路 | PTA乙级—— 1051 复数乘法 (15 分)(精简)

    1051 复数乘法 (15 分) 复数可以写成 (A+Bi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i ​2 ​​ =−1:也可以写成极坐标下的指数形式 (R×e ​(Pi) ...

  9. C++学习之路 | PTA乙级—— 1026 程序运行时间(精简)

    1026 程序运行时间 (15 分) 要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗 ...

最新文章

  1. 环视感知网络的多任务和单任务之争
  2. 简单谈一点linux内核中套接字的bind机制--数据结构以及端口确定
  3. foreach循环怎么获取全部返回值_jmeter基础逻辑控制器之ForEach控制器
  4. CI Weekly #22 | flow.ci 新版 iOS 构建流程的 4 大变化
  5. 【19行代码AC,简洁】1029 Median (25 分)
  6. mysql事务的 四个特征(ACID)
  7. 2.1线性表的类型定义
  8. 测试助手健康 Test-AssistantHealth failed for server
  9. 嵌入式工作笔记0004---常见术语积累--随时更新
  10. opencv 打开视频或摄像头并按格式保存图片,读取图片
  11. MATLAB图像去雾处理
  12. c++调用powershell_告别 Windows 终端的难看难用,从改造 PowerShell 的外观开始
  13. linux df -h显示空间信息不正确
  14. 描述数据库表关系之间的ER图(1对1,1对多,多对1,多对多等关系)
  15. 王明道牧师《写给青年基督徒的一封信》
  16. J9数字货币科普:什么是加密借贷?有什么风险存在?
  17. Python实现群发邮件
  18. 微服务架构之服务网关
  19. matlab矩阵的第一列,matlab提取矩阵第一列
  20. C语言零基础速通——函数(7分钟搞懂)

热门文章

  1. 论文浅尝 - WSDM2020 | QAnswer KG: 基于RDF数据设计一个可移植问答系统
  2. 论文浅尝 | 具有图卷积网络和顺序注意力机制的应用于目标导向的对话系统
  3. NLP事件抽取综述(上中下):中文事件抽取、开放域事件抽取、事件数据生成、跨语言事件抽取、小样本事件抽取、零样本事件抽取等类型
  4. 【TensorFlow】优化方法optimizer总结(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)解析(十三)
  5. EventBus1.0.1源码解析
  6. 责任链模式在Android中的应用
  7. 国科大高级人工智能5-RNN/LSTM/GRU/集束搜索/attention
  8. 搭建Java开发环境及相关工具
  9. 编译过程中的链接地址对最终编译镜像文件的影响
  10. MySql某一列累计查询