月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。

注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 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
思路
  • 如果东西是可以拆分卖的话,当然是卖单价高的——简单的贪心策略
  • PTA(Advanced Level)1070 Mooncake是这题的英文版
代码
#include<bits/stdc++.h>
using namespace std;
struct node
{
double stock;
double price;
}a[1010];
const double EPS = 1e-7;
bool cmp(node x, node y)
{
double unit_price1 = x.price * 1.0/ x.stock;
double unit_price2 = y.price * 1.0/ y.stock;
return unit_price2 + EPS < unit_price1;
} int main()
{
int n, d;
cin >> n >> d;
for(int i=0;i<n;i++)
cin >> a[i].stock;
for(int i=0;i<n;i++)
cin >> a[i].price;
sort(a, a+n, cmp); double profit = 0.0;
for(int i=0;i<n;i++)
{
if(a[i].stock <= d) //对应的货物的库存量 <= 需求量,也就是说这种要全卖
{
profit += a[i].price;
d -= a[i].stock;
}
else //否则就是库存量 > 需求量,卖一些就行
{
profit += (a[i].price * 1.0 / a[i].stock) * d;
break;
}
}
printf("%.2f\n", profit);
return 0;
}
引用

https://pintia.cn/problem-sets/994805260223102976/problems/994805301562163200

PTA(Basic Level)1020.月饼的更多相关文章

  1. PTA(Basic Level)1006.Sign In and Sign Out

    At the beginning of every day, the first person who signs in the computer room will unlock the door, ...

  2. 来自PTA Basic Level的三只小野兽

    点我阅读原文 最近利用闲暇时间做了一下 PTA Basic Level[1] 里的题,里面现在一共有 95 道题,这些题大部分很基础,对于刷倦了 leetcode 的小伙伴可以去里面愉快的玩耍哦. 这 ...

  3. PTA (Advanced Level) 1020 Tree Traversals

    Tree Traversals Suppose that all the keys in a binary tree are distinct positive integers. Given the ...

  4. PTA(Basic Level)1057.数零壹

    给定一串长度不超过 105 的字符串,本题要求你将其中所有英文字母的序号(字母 a-z 对应序号 1-26,不分大小写)相加,得到整数 N,然后再分析一下 N 的二进制表示中有多少 0.多少 1.例如 ...

  5. PTA(Basic Level)-1002 写出这个数

    一 1002 写出这个数  读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10​10 ...

  6. PTA(Basic Level)-1076 Wifi密码

    一 题目介绍:     现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4.本题就要求你写程序把一系列题目的答案按照卷子上给出的对应关系翻译成 wifi 的密码.这里简单假设每道 ...

  7. PTA(Basic Level)1039.到底买不买

    小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子 ...

  8. PTA(Basic Level)1033.旧键盘打字

    旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在 2 行中分别给出坏掉的那些键.以及应该输入 ...

  9. PTA --- Basic Level 1009 说反话

    1009 说反话 (20 point(s))   给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由 ...

随机推荐

  1. sql server 存储过程的详解

    SqlServer存储过程详解 1.创建存储过程的基本语法模板: if (exists (select * from sys.objects where name = 'pro_name')) dro ...

  2. mysql日志文件路径

    SHOW VARIABLES LIKE 'general_log_file';日志文件路径SHOW VARIABLES LIKE 'log_error';错误日志文件路径SHOW VARIABLES ...

  3. c 判断数字是否无限

    /* isinf example */ #include <stdio.h> /* printf */ #include <math.h> /* isinf, sqrt */ ...

  4. 2019巅峰极客CTF-web1(LOL英雄联盟)

    今晚有空 以后随缘写博客了 好好沉淀 web1当天做出的队伍很少 其实不难    折腾到最后就差一步  可惜    0x01 读取文件 截图没留了 只留了代码部分. 有个页面  有上传和下载功能 起初 ...

  5. Fiddler 安装使用

    Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的小功能 ...

  6. root of context hierarchy

    Spring Boot项目,运行不明中断.日志如下: 2018-11-03 11:03:43.358 INFO [Thread-2][AbstractApplicationContext.java:9 ...

  7. 令人窒息的操作,nodejs面向对象。

    // async函数返回一个 Promise 对象,可以使用then方法添加回调函数. // 当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句. clas ...

  8. StringUtils的isNotEmpty,isNotBlank方法的区别

    这两个用着用着老是混淆或者忘记,今天写一下做个笔记,对比下两个判断方法的区别 isNotEmpty: 判断某字符串是否非空,等于!isEmpty(String str),这里不能排除空格字符 Stri ...

  9. eclipse CDT Error: Program "g++" not found in PATH

    右击project explore ->properties-  >c/c++ build->environment , 设置 mingw_home 路径

  10. ajax传参数json对象到后台获取

    类型1 var version = $("#version").val(); var ids[i] = ("127.0.0.1","192.168.1 ...