算法题练习系列之(十三): 月饼
来源:互联网 发布:linux重启oracle命令 编辑:程序博客网 时间:2024/04/30 01:56
--------------------------------------------------------------------------------------------------------------------------------------------------------
时间限制:1秒 空间限制:32768K 代码长度限制 100 KB
--------------------------------------------------------------------------------------------------------------------------------------------------------
题目描述
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有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).根据需求量来逐一从高价到低价月饼累加,直到够需求量为止。
--------------------------------------------------------------------------------------------------------------------------------------------------------
package com.biyao.algorithm.niuke.a1;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import java.util.Scanner;public class Main_a1_010 { public static void main(String[] args) { class YueBing{ public double kucunliang; public double zongshoujia; public double danjia; public YueBing(double kucunliang,double zongshoujia){ this.kucunliang = kucunliang; this.zongshoujia = zongshoujia; this.danjia = this.zongshoujia/this.kucunliang; } } Scanner scan = new Scanner(System.in); while(scan.hasNext()){ int n = scan.nextInt(); int d = scan.nextInt(); List<YueBing> ybList = new ArrayList<YueBing>(); double[]kclArr = new double[n]; double[]zsjArr = new double[n]; for (int i = 0; i < n; i++) { kclArr[i] = scan.nextDouble(); } for (int i = 0; i < n; i++) { zsjArr[i] = scan.nextDouble(); } for (int i = 0; i < n; i++) { YueBing yb = new YueBing(kclArr[i],zsjArr[i]); ybList.add(yb); } Comparator<YueBing> myCompartor = new Comparator<YueBing>(){ @Override public int compare(YueBing o1, YueBing o2) { if(o1 == null || o2 == null){ return -1; } double danjia1 = o1.danjia; double danjia2 = o2.danjia; if(danjia1 < danjia2){ return 1; }else if(danjia1 == danjia2){ return 0; }else{ return -1; } } }; Collections.sort(ybList, myCompartor); double maxIncome = 0; double dCount = d/1.0; int i = 0; while(dCount > 0){ YueBing yb = ybList.get(i); if(dCount <= yb.kucunliang){ maxIncome = maxIncome + dCount*yb.danjia; break; }else{ dCount = dCount - yb.kucunliang; maxIncome = maxIncome + yb.zongshoujia; } i++; } System.out.println(String.format("%.2f", maxIncome)); } } }
- 算法题练习系列之(十三): 月饼
- 算法题练习系列之(二十三): 完美数列
- 基础算法系列(十三)排序算法之地精排序
- [算法系列之二十三]线段树(Interval Tree)
- 算法题练习系列之(一):守形数
- 算法题练习系列之(二):矩阵最大值
- 算法题练习系列之(三):成绩排序
- 算法题练习系列之(五):数字分类
- 算法题练习系列之(六):数素数
- 算法题练习系列之(七):福尔摩斯的约会
- 算法题练习系列之(八):德才论
- 算法题练习系列之(九):部分A+B
- 算法题练习系列之(十):A除以B
- 算法题练习系列之(十一):锤子剪刀布
- 算法题练习系列之(十二): 数字黑洞
- 算法题练习系列之(十四): 个位数统计
- 算法题练习系列之(十七): 科学计数法
- 算法题练习系列之(十八): 反转链表
- 数据库字段 驼峰风格 互相转换
- 暑期项目开发实训 Day22
- 标识符和数据类型
- HDU 5831 Rikka with Parenthesis II (括号匹配)
- 代码风格规范
- 算法题练习系列之(十三): 月饼
- tomcat 启动失败问题:Server Tomcat v8.0 Server at localhost failed to start.
- 无法将项目和文件的编码格式从UTF-8转为GBK
- LCD的封装
- Spark ML包中的几种归一化方法总结
- springMVC的@RequestParam注解和@PathVariable注解的区别
- imx6设备树pinctrl解析
- C陷阱与缺陷第一章 词法“陷阱”
- 根据中序、前序(后序)输出树的后序(前序),不重建树