月饼 (25)

时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)

题目描述

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

注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种月饼、以及5万吨第3种月饼,获得 72 + 45/2 = 94.5(亿元)。

输入描述:

每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N表示月饼的种类数、以及不超过500(以万吨为单位)的正整数D表示市场最大需求量。随后一行给出N个正数表示每种月饼的库存量(以万吨为单位);最后一行给出N个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。

输出描述:

对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后2位。

输入例子:

3 2018 15 1075 72 45

输出例子:

94.50
 
 
思路分析:
 
1.首先用每种月饼的总售价除以月饼的库存量,得到每种月饼的平均单价,
 
2.根据月饼的单价的降序将月饼进行排序,
 
3.判断单价最高的月饼的库存量是否能够满足市场最大需求量,
 
  ①若满足,则直接用需求量*单价就得出最大收益了,
 
 
    例如输入:
      2   100
      200  300
      400  300
 
    表示共有两种月饼,市场最大需求量为100,
 
    第一种月饼的单价:400/200=2,第二种月饼的单价:300/300=1,
 
    所以首先选择单价为2的月饼,因(市场需求量)100<200(单价最大的月饼的库存量),
 
    则100*2=200就是最大收益。
 
 
  ②否则用需求量减去单价最高的月饼的库存量,得到一个新的需求量,
 
  再判断单价第二大的月饼的库存是否满足需求量,,,
 
  以此递归下去,直至满足市场的需求量为止。
 
    例如输入:
      2   300
      200  300
      400  300
 
    表示共有两种月饼,市场最大需求量为300,
 
    第一种月饼的单价:400/200=2,第二种月饼的单价:300/300=1,
 
    所以首先选择单价为2的月饼,因(市场需求量)300>200(单价最大的月饼的库存量),这种月饼要全部卖出;
 
    需求量=300-200=100;
 
    重复以上步骤,因为100<300,所以收益=100*1=100;
 
    则200*2+100*1=500就是总的最大收益。
 
 
Java 代码如下:
 
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sca = new Scanner(System.in);
        int n = sca.nextInt();
        int d = sca.nextInt();
        double[] Stock = new double[n];
        double[] price = new double[n];
        double[] Proportion = new double[n];
        double temp;
        double sum = 0;
        for (int i = 0; i < price.length; i++) {
            Stock[i] = sca.nextFloat();
        }
        for (int i = 0; i < price.length; i++) {
            price[i] = sca.nextFloat();
        }
        for (int i = 0; i < Proportion.length; i++) {
            Proportion[i] =price[i]/(Stock[i]*1.000);
        }
        for (int i = 0; i < Proportion.length-1; i++) {
            for (int j = i+1; j < Proportion.length; j++) {
                if(Proportion[i]<Proportion[j]){
                    temp = Proportion[j];
                    Proportion[j] = Proportion[i];
                    Proportion[i] = temp;

                    temp = Stock[j];
                    Stock[j] = Stock[i];
                    Stock[i] = temp;

                    temp = price[j];
                    price[j] = price[i];
                    price[i] = temp;
                }
            }
        }

        for (int i = 0; i < Proportion.length; i++) {
            if(d==0)
                break;
            if(d>=Stock[i]){
                sum+=price[i];
                d-=Stock[i];
            }else{
                sum+=Proportion[i]*1.000*d;
                d=0;
            }
        }
        System.out.println(String.format("%.2f",sum));
    }
}

牛客网 PAT 算法历年真题 1010 : 月饼 (25)的更多相关文章

  1. 牛客网 PAT 算法历年真题 1003: 数素数 (20)

    1003:数素数 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 令Pi表示第i个素数.现任给两个正整 ...

  2. 牛客网 PAT 算法历年真题 1012 : D进制的A+B (20)

    D进制的A+B (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 输入两个非负10进制整数A和B(< ...

  3. 牛客网 PAT 算法历年真题 1009 : 1019. 数字黑洞 (20)

    1019. 数字黑洞 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定任一个各位数字不完全相同的4 ...

  4. 牛客网 PAT 算法历年真题 1011 : 个位数统计 (15)

    个位数统计 (15) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定一个k位整数N = dk-1*10k- ...

  5. 牛客网 PAT 算法历年真题 1008 : 锤子剪刀布 (20)

    锤子剪刀布 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 大家应该都会玩“锤子剪刀布”的游戏:现给出 ...

  6. 牛客网 PAT 算法历年真题 1002 :数字分类 (20)

    1002 :数字分类 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定一系列正整数,请按要求对数字 ...

  7. 牛客网 PAT 算法历年真题 1001 : A+B和C (15)

    1001 : A+B和C (15) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard 题目描述 给定区间[-2的31次方, 2的31次方]内 ...

  8. 牛客网剑指offer刷题总结

    二维数组中的查找: 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 两 ...

  9. 牛客网PAT乙级(Basic Level)真题-组个最小数 (20)

    组个最小数 (20) 时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小) 题目描述 给定数字0-9各若干个.你可以以任意顺序排 ...

随机推荐

  1. VR外包公司—2016中国VR开发者论坛第一期

    由VR界网和暴风魔镜联合举办的2016中国VR开发者论坛第一期已于3月2日下午5点在吉林动画学院圆满落幕,本次论坛云集了VR相关领域的精英,邀请了VR社交<极乐王国>.暴风魔镜.南京睿悦. ...

  2. Oracle Single-Row Functions(单行函数)——NULL-Related Functions

    参考资料:http://docs.oracle.com/database/122/SQLRF/Functions.htm#SQLRF006 Single-row functions return a ...

  3. Spring boot Value注入 未整理 待完善

    Springboot 热部署Springboot为开发者提供了一个名叫 spring-boot-devtools来使Springboot应用支持热部署,提供开发者的开发效率,无需手动重启Spring ...

  4. Python3 函数注解

    Python3提供一种语法,用于为函数声明中的参数和返回值附加元数据.下面的例子是注解后的版本,特点在第一行: 1 def clip(text : str, max_len : 'int > 0 ...

  5. [原][osg]osgconv浅析

    查看osgconv.cpp main函数在533行 osg::ArgumentParser arguments(&argc,argv); //........一堆功能不管,先看一下文件读写 F ...

  6. 《剑指offer》第五十九题(队列的最大值)

    // 面试题59(二):队列的最大值 // 题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值.例如, // 如果输入数组{2, 3, 4, 2, 6, 2, 5, 1}及滑动窗口的大小 ...

  7. 一篇好文之Android数据库 GreenDao的完全解析

    数据库GreenDao.jpg 之前在开发过程中,数据库基本上会使用Litepal或者SQlite自己写,最近换新环境,公司原先使用的数据库就是GreenDao,在各种情况的作用下,准备了解下Gree ...

  8. 虹软人脸识别SDK的接入方法

    背景: 虹软的人脸识别还是不错的,在官方注册一个账号,成为开发者,下载SDK的jar包,在开发者中心,找一个demo就可以开始做了,安装里边的逻辑,先看理解代码,然后就可以控制代码,完成自己想要的功能 ...

  9. 学习笔记17—circos安装集(window环境)

    Windows7环境下Circos使用教程 一.下载安装软件包 1.strawberry perl 因为Circos软件是依赖perl语言编译环境的,但是windows环境下默认是没有perl的,所以 ...

  10. Python 新建程序

    1.建立一个新的文件夹 2.建一个包 3.建一个程序项目 4.默认模板配置