题目要求
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);
}
}