[Luogu] P9761 题解

P9761 题解

思路:

由题意可知:机器启动需要时间,在这段时间内机器无法制造零件,并且两台机器不可同时启动。

所以,如果先启动机器 \(1\) 再启动机器 \(2\),那么机器 \(1\) 共制造 \((k - a) \times x\) 个零件,机器 \(2\) 共制造 \((k - a - b) \times y\) 个零件,总共制造了 \((k - a) \times x + (k - a - b) \times y\) 个零件。

反之,如果先启动机器 \(2\) 再启动机器 \(1\),那么机器 \(2\) 共制造 \((k - b) \times y\) 个零件,机器 \(1\) 共制造 \((k - a - b) \times x\) 个零件,总共制造了 \((k - b) \times y + (k - a - b) \times x\) 个零件。

因为要求的是输出最多能制造的零件个数,所以输出:

\[\max((k-a)\times x + (k - a - b) \times y,(k-b)\times y + (k - a - b) \times x) \]

于是就有了:

printf("%lld", max((k - a) * x + (k - a - b) * y, (k - b) * y + (k - a - b) * x));

喜提 \(14\) 分。

但注意到 \(0\le k, a, x, b, y \le 10^9\),也就是说 \((k - a)\)\((k - b)\)\((k - a - b)\) 是有可能小于 \(0\) 的,当这些式子的值小于 \(0\) 时,将它们赋值为 \(0\) 再进行计算即可。

#include <bits/stdc++.h>

using namespace std; 

typedef long long ll;

ll k, a, x, b, y;

ll f(ll x) {
	if (x < 0) return 0;//小于 0 时返回 0
}

int main() {
	
	scanf("%lld %lld %lld %lld %lld", &k, &a, &x, &b, &y);
	printf("%lld", max(f(k - a) * x + f(k - a - b) * y, f(k - b) * y + f(k - a - b) * x));
	
	return 0;
}
posted @ 2023-11-17 20:51  FurippuWRY  阅读(16)  评论(0)    收藏  举报