zoukankan      html  css  js  c++  java
  • B1020 月饼(25 分)

    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>
    #define maxn 1010
    using namespace std; 
    struct mooncake{
    	double save; 
    	double sale;
    	double average;
    };
    bool cmp(mooncake a,mooncake b){
    	return a.average > b.average;
    }
    int main(){
    	int n;//月饼种数
    	double d;//市场需求月饼
    	struct mooncake moon[maxn];
    	scanf("%d %lf", &n, &d);	
    	for(int i=0 ;i < n; i++)
    		scanf("%lf", &moon[i].save);
    	for(int i=0 ;i < n; i++)	 
    		scanf("%lf", &moon[i].sale);
    	for(int i=0 ;i < n; i++)	 
    		moon[i].average = moon[i].sale / moon[i].save;
    	sort(moon, moon + n, cmp);//按均价从大到小排列
    	int i =0;
    	double sale = 0, temp = 0; //temp记录已卖出的万吨数 
    	while(i<n && temp < d){/*枚举的时候这个退出循环的条件容易被略过,第3测试点就是这个问题*/
    		temp += moon[i].save;
    		sale += moon[i].sale;
    		i++;
    	}
      if(temp > d){
    		sale = sale - moon[i-1].sale + (d - (temp-moon[i-1].save))*moon[i-1].average;
    	} 
    	printf("%.2lf", sale);
    	return 0;
    } 
    

    跳过究竟是什么问题???就是全部n种月饼用上都不够或刚刚好的情况

  • 相关阅读:
    Leetcode 349. Intersection of Two Arrays
    hdu 1016 Prime Ring Problem
    map 树木品种
    油田合并
    函数学习
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 101. Symmetric Tree
    poj 2524 Ubiquitous Religions(宗教信仰)
    pat 1009. 说反话 (20)
  • 原文地址:https://www.cnblogs.com/lingr7/p/9545187.html
Copyright © 2011-2022 走看看