PAT B1020 月饼(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
全部AC
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
struct MoonCake {
double cost; //总售价
double save; //库存量
double per_cost; //万吨单价
}mooncake[1100];
void calc_per_cost(MoonCake& A){
A.per_cost = A.cost / A.save;
}
bool cmp(MoonCake A, MoonCake B) {
return A.per_cost > B.per_cost;
}
int main() {
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif // ONLINE_JUDGE
int n; //月饼的种类数
double m; //市场最大需求数
scanf("%d %lf", &n, &m);
//输入各月饼的库存
// printf("%d %.2lf\n", n, m);
for(int i = 0; i < n; i++) {
scanf("%lf", &mooncake[i].save);
}
//输入各月饼的总售价并计算万吨单价
for(int i = 0; i < n; i++) {
scanf("%lf", &mooncake[i].cost);
calc_per_cost(mooncake[i]);
}
// for(int i = 0; i < n; i++){
// printf("cost:%lf save:%lf per_cost:%.2lf\n", mooncake[i].cost, mooncake[i].save, mooncake[i].per_cost);
// }
//按照万吨单价从大到小排序
sort(mooncake, mooncake+n, cmp);
// printf("排序后\n");
// for(int i = 0; i < n; i++){
// printf("cost:%lf save:%lf per_cost:%.2lf\n", mooncake[i].cost, mooncake[i].save, mooncake[i].per_cost);
// }
//计算最大收益
double shouyi = 0;//最大收益
if(m < mooncake[0].save) { //最大需求量小于单价最高月饼的库存
shouyi = m * mooncake[0].per_cost;
} else if(m > mooncake[0].save){//最大需求量大于单价最高月饼的库存
int temp = m;
int a = 0;//结构体数组下标
//因为单个库存小于最大需求量,先计算总的在计算剩余小于库存量的。
while(temp > 0 && temp > mooncake[a].save && a < n) { //a小于n是全部月饼都卖出去了
shouyi += mooncake[a].cost;
temp -= mooncake[a].save;
a++;
}
//剩余小于库存量的
shouyi += temp * mooncake[a].per_cost;
}
printf("%.2lf", shouyi);
return 0;
}
PAT B1020 月饼(25)的更多相关文章
- PAT 1020 月饼 (25)(精简版代码+思路+推荐测试用例)
1020 月饼 (25)(25 分)提问 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是 ...
- PAT 1020. 月饼 (25)
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...
- 【C/C++】贪心/算法笔记4.4/PAT B1020月饼/PAT B1023组内最小数
简单贪心 所谓简单贪心,就是每步都取最优的一种方法. 月饼问题:有N种月饼,市场最大需求量D,给出每种月饼的库存量和总售价. 思路:从贵的往便宜的卖.如果当前的已经卖完了,就卖下一个.如果剩余D不足, ...
- B1020 月饼(25分)
#include<cstdio> #include<algorithm> #include<iostream> using namespace std; struc ...
- PAT B1020 月饼
#include<iostream> #include<algorithm> using namespace std; struct mooncake { double sto ...
- B1020 月饼(25 分)
B1020 月饼(25 分) 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意 ...
- PAT乙级 1020. 月饼 (25)(只得到23分)
1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食 ...
- 牛客网 PAT 算法历年真题 1010 : 月饼 (25)
月饼 (25) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 月饼是中国人在中秋佳节时吃的一种传统食品,不同地 ...
- PAT 乙级 1020 月饼 (25) C++版
1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食 ...
随机推荐
- 调用七牛云存储文件,返回url
文档地址:https://developer.qiniu.com/kodo/sdk/1283/javascript#2 npm引入 npm install qiniu-js 例子: var obser ...
- 7.13 T2 Shit 题(shit)
[题目描述] 某一天,小
- Mybatis源码学习之事务管理(八)
简述 在实际开发中,数据库事务的控制是一件非常重要的工作,本文将学习Mybatis对事务的管理机制.在Mybatis中基于接口 Transaction 将事务分为两种,一种是JdbcTransacti ...
- Robot Framework(七)创建用户关键字
2.6创建用户关键字 关键字表用于通过将现有关键字组合在一起来创建新的更高级别关键字.这些关键字称为用户关键字,以区别于 测试库中实现的最低级库关键字.创建用户关键字的语法与创建测试用例的语法非常接近 ...
- 说说如何使用unity Vs来进行断点调试
转载自:http://dong2008hong.blog.163.com/blog/static/4696882720140293549365/ 大家可以从这下载最新版的unity vs. Unity ...
- 在docker 安装gitlab
一.Centos 7 上安装 官方文档:https://docs.docker.com/install/linux/docker-ce/centos/ 1.安装环境 yum install ...
- LNMP和LAMP的搭建
LNMP 环境:阿里云ubuntu 16 mysql: apt-get install mysql-server mysql-client php: apt-get install php-fpm p ...
- L1-049 天梯赛座位分配 (20 分)
L1-049 天梯赛座位分配 (20 分)(Java解法) 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所 ...
- python+selenium 切换至iframe
方法一: from selenium import webdriver driver = webdriver.Firefox() driver.switch_to.frame(0) # 1.用fram ...
- 之前有面试到两个日期的大小比较方式,现在整理一下几种方法。 例子: String beginTime=new String("2017-06-09 10:22:22"); String endTime=new String("2017-05-08 11:22:22"); 1 直接用Date自带方法before()和after()比较 SimpleDateFormat d
各种数据类型(日期/时间.integer.floating point和numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成指定的数据类型.下面列出了这些函数,它们都遵循一个公共的调用 ...