首页 > 其他 > 详细

快乐司机

时间:2020-02-25 19:50:25      阅读:54      评论:0      收藏:0      [点我收藏+]
问题描述
  "嘟嘟嘟嘟嘟嘟
  喇叭响
  我是汽车小司机
  我是小司机
  我为祖国运输忙
  运输忙"
  这是儿歌“快乐的小司机”。话说现在当司机光有红心不行,还要多拉快跑。多拉不是超载,是要让所载货物价值最大,特别是在当前油价日新月异的时候。司机所拉货物为散货,如大米、面粉、沙石、泥土......
  现在知道了汽车核载重量为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 Main {

    public static void main(String args[]) {
        
        Scanner input = new Scanner(System.in);
//        输入货物种类
        int c = input.nextInt();
//        输入总载货量
        float weight = input.nextFloat();
        float pi[] = new float[c];
        float gi[] = new float[c];
//        输入每种货物的价值和重量
        for(int i =0;i<c;i++) {
            gi[i] = input.nextFloat();
            pi[i] = input.nextFloat();
        }
        float f[] = new float[c];
//        计算每种货物的价值比
        for(int i = 0;i<c;i++) {
            f[i] = pi[i] / gi[i];
            BigDecimal b = new BigDecimal(f[i]);  
            f[i] = b.setScale(3,BigDecimal.ROUND_HALF_UP).floatValue();  
        }
        float sum_gi = 0;
        float sum_pi = 0;
        int k = 0;
        float max;
        for(int i = 0;i<c;i++) {
            max = 0;
//            寻找最大价值比商品
            for(int j = 0;j<c;j++) {
                if(f[j] >= max) {
                    max = f[j];
                    k = j;
                }
            }

//            将当前货物的全部装入货车
            if(sum_gi + gi[k] <= weight) {
                sum_pi += pi[k];
                sum_gi += gi[k];
                
            }
//            将当前货物的部分装入货车
            else {
                sum_pi += (weight - sum_gi) * f[k];
                break;
            }
            f[k] = -1;
            
        }
//        保留一位小数并输出总价值
        BigDecimal b = new BigDecimal(sum_pi);  
        sum_pi = b.setScale(1,BigDecimal.ROUND_HALF_UP).floatValue();  
        System.out.println(sum_pi);
        
    }


}

 

快乐司机

原文:https://www.cnblogs.com/shiaguang/p/12363064.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!