您当前的位置: 首页 >  Java

星拱北辰

暂无认证

  • 0浏览

    0关注

    1205博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

比较决策的收益(洛谷P2705题题解,Java语言描述)

星拱北辰 发布时间:2020-02-01 10:09:16 ,浏览量:0

题目要求

P2705题目链接 在这里插入图片描述

分析

这题本质上只有两种收益:

  • 红蓝互换,剩下的在自己的坑位里
  • 红蓝互不交换,各忙各的

我们就是要考虑这两种方案的收益。 考虑的时候不妨先求出比较简单的一种方案,再用另一种方案去换。

其实第二种方案更容易思考到,所以先求一下,即redNum * c + blueNum * d

然后可以尝试进行这样的交换:把一个红球扔进蓝盒,必须同时把一个蓝球扔进红盒;两球拿出时减少收益c+d,重新放入时增加收益2×e。

只有2×e>c+d才值得一换,否则就是血亏。 如果值得换,就能换多少换多少,争取获得最大利益,这交换的个数就是Math.min(redNum, blueNum)

所以一旦值得,追加收益是这么表示的:

if (2*e > c+d) {
    result += Math.min(redNum, blueNum) * (2*e-c-d);
}

然后就完事啦~~

AC代码(Java语言描述)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int redNum = scanner.nextInt(), blueNum = scanner.nextInt(), c = scanner.nextInt(),
                d = scanner.nextInt(), e = scanner.nextInt();
        scanner.close();
        int result = redNum*c + blueNum*d;
        if (2*e > c+d) {
            result += Math.min(redNum, blueNum) * (2*e-c-d);
        }
        System.out.println(result);
    }
}
关注
打赏
1660750074
查看更多评论
立即登录/注册

微信扫码登录

0.0376s