• PTA(Basic Level)1020.月饼


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

    注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 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
    ", profit);
    	return 0;
    }
    
    引用

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

  • 相关阅读:
    mybatis---demo1--(1-n)----bai
    字符流之文件读写流
    字节字符转换流
    字节缓冲流
    字节流之数据输入输出流
    字节流之文件输出流FileOutputStream
    【洛谷P3916】图的遍历
    【codevs1297】硬币 完全背包
    【codevs2205】等差数列
    【洛谷P1214】等差数列
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/11904262.html
Copyright © 2020-2023  润新知