算法提高 快乐司机

时间限制:1.0s 内存限制:256.0MB

问题描述

  “嘟嘟嘟嘟嘟嘟

  喇叭响

  我是汽车小司机

  我是小司机

  我为祖国运输忙

  运输忙”

  这是儿歌“快乐的小司机”。话说现在当司机光有红心不行,还要多拉快跑。多拉不是超载,是要让所载货物价值最大,特别是在当前油价日新月异的时候。司机所拉货物为散货,如大米、面粉、沙石、泥土…

  现在知道了汽车核载重量为w,可供选择的物品的数量n。每个物品的重量为gi,价值为pi。求汽车可装载的最大价值。(n<10000,w<10000,0<gi<=100,0<=pi<=100)

输入格式

  输入第一行为由空格分开的两个整数n w

  第二行到第n+1行,每行有两个整数,由空格分开,分别表示gi和pi

输出格式

  最大价值(保留一位小数)

样例输入

5 36

99 87

68 36

79 43

75 94

7 35

样例输出

71.3

解释:

先装第5号物品,得价值35,占用重量7

再装第4号物品,得价值36.346,占用重量29

最后保留一位小数,得71.3

import java.math.BigDecimal;
import java.util.Scanner; public class 快乐司机 {
public static void main(String args[]) {
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
// 输入货物种类
int classes = input.nextInt();
// 输入总载货量
float weight = input.nextFloat();
float each_price[] = new float[classes];
float each_weight[] = new float[classes];
// 输入每种货物的价值和重量
for(int i =0;i<classes;i++) {
each_weight[i] = input.nextFloat();
each_price[i] = input.nextFloat();
}
// 测试输入数据的正确性
// for(int i = 0;i<classes;i++) {
// System.out.println("wight:"+each_weight[i]+" price:"+each_price[i]);
// } float benefit[] = new float[classes];
// 计算每种货物的价值比
for(int i = 0;i<classes;i++) {
benefit[i] = each_price[i] / each_weight[i];
BigDecimal b = new BigDecimal(benefit[i]);
benefit[i] = b.setScale(3,BigDecimal.ROUND_HALF_UP).floatValue(); } // 测试货物价值比正确性
// for(int i = 0;i<classes;i++) {
// System.out.println(benefit[i]);
// }
float sum_weight = 0;
float sum_price = 0;
int k = 0;
float max;
for(int i = 0;i<classes;i++) {
max = 0;
// 寻找最大价值比商品
for(int j = 0;j<classes;j++) {
if(benefit[j] >= max) {
max = benefit[j];
k = j;
}
}
// System.out.println("benefit:"+benefit[k]+" index:"+k);
// 将当前货物的全部装入货车
if(sum_weight + each_weight[k] <= weight) {
sum_price += each_price[k];
sum_weight += each_weight[k]; }
// 将当前货物的部分装入货车
else {
sum_price += (weight - sum_weight) * benefit[k];
break;
}
benefit[k] = -1; }
// 保留一位小数并输出总价值
BigDecimal b = new BigDecimal(sum_price);
sum_price = b.setScale(1,BigDecimal.ROUND_HALF_UP).floatValue();
System.out.println(sum_price); } }

Java实现 蓝桥杯 算法提高 快乐司机的更多相关文章

  1. Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)

    试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...

  2. Java实现 蓝桥杯 算法提高 小X的购物计划

    试题 算法提高 小X的购物计划 问题描述 小X打算去超市shopping.小X没什么钱,只有N元.超市里有M种物品,每种物品都需要money,在小X心中有一个重要度.有的物品有无限件,有的物品只有几件 ...

  3. Java实现 蓝桥杯 算法提高 天天向上(DP)

    试题 算法提高 天天向上 问题描述 A同学的学习成绩十分不稳定,于是老师对他说:"只要你连续4天成绩有进步,那我就奖励给你一朵小红花."可是这对于A同学太困难了.于是,老师对他放宽 ...

  4. Java实现 蓝桥杯 算法提高 欧拉函数(数学)

    试题 算法提高 欧拉函数 问题描述 老师出了一道难题,小酱不会做,请你编个程序帮帮他,奖金一瓶酱油: 从1-n中有多少个数与n互质? |||||╭══╮ ┌═════┐ ╭╯让路║═║酱油专用车║ ╰ ...

  5. Java实现 蓝桥杯 算法提高 计算超阶乘(暴力)

    试题 算法提高 计算超阶乘 问题描述 计算1*(1+k)(1+2k)(1+3k)-(1+n*k-k)的末尾有多少个0,最后一位非0位是多少. 输入格式 输入的第一行包含两个整数n, k. 输出格式 输 ...

  6. Java实现蓝桥杯 算法提高 线段和点

    算法提高 线段和点 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 有n个点和m个区间,点和区间的端点全部是整数,对于点a和区间[b,c],若a>=b且a<=c,称点a满 ...

  7. Java实现蓝桥杯-算法提高 P1003

    算法提高 P1003 时间限制:1.0s 内存限制:256.0MB 作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词.不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检 ...

  8. Java实现蓝桥杯 算法提高 八皇后 改

    **算法提高 8皇后·改** 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋 ...

  9. Java实现 蓝桥杯 算法提高 高精度减法(JDK方法)

    试题 算法提高 高精度减法 问题描述 高精度减法 输入格式 两行,表示两个非负整数a.b,且有a > b. 输出格式 一行,表示a与b的差 样例输入 1234567890987654321 99 ...

随机推荐

  1. 【2020Java最新学习路线】写了很久,这是一份最适合普通大众、科班、非科班的路线

    点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...

  2. python重试次数装饰器

    目录 重试次数装饰器 重试次数装饰器 前言, 最近在使用tornado框架写Restful API时遇到很多的问题. 有框架的问题, 有异步的问题. 虽然tornado 被公认为当前python语言最 ...

  3. java 8 stream、lambda表达式对list操作分组、过滤、求和、最值、排序、去重

    1.分组 通过groupingBy分组指定字段 list.stream().collect(Collectors.groupingBy(User::getSex)); 2.过滤 通过filter方法过 ...

  4. Android CodeReview 些许总结

    CodeReview些许总结 1:使用Handler的时候,使用handler.post(Runnable);,hanler与类尽量保持弱引用关系,或者使用静态的handler对象 public Ha ...

  5. python--字典基本操作

    字典 格式  key  :value # string list dict#  1.取数据方便# 2.速度快, 定义一个空字典: d = dict() 或者 d = { } infos  =  {'n ...

  6. 我的linux学习日记day5

    一.vim 编辑器 有三种模式,命令模式,输入模式,末行模式 1.下面是命令模式常用的命令 2.末行模式常用命令 :w 保存 :q 退出 :q! 强制退出 :wq! 强制保存退出 :set nu 显示 ...

  7. Kubernetes实战 - 从零开始搭建微服务 1 - 使用kind构建一个单层架构Node/Express网络应用程序

    使用kind构建一个单层架构Node/Express网络应用程序 Kubernetes实战-从零开始搭建微服务 1 前言 准备写一个Kubernetes实战系列教程,毕竟cnblogs作为国内最早的技 ...

  8. 使用Redis——拳打南山敬老院,脚踩北斗幼儿园

    拳打南山敬老院,脚踩北斗幼儿园 Redis 你说你用过对吧,你们怎么用的? 面试官您好,因为传统的关系型数据库如Mysql已经不能适用所有的场景了,比如秒杀的库存扣减,APP首页的访问流量高峰等等,都 ...

  9. dTree

    1.dtree.js源码 /*--------------------------------------------------| | dTree 2.05 | www.destroydrop.co ...

  10. 依赖工程开发,编译报错Command Libtool failed with a nonzero exit code

    升级AFN之后,SDK工程始终编译不通过找不到SDK.a 原因在SDK Target ->Build phases ->Link Binary With Libraries 多添加了SDK ...