[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;
}

浙公网安备 33010602011771号