CF1862F 题解
思路
这题我们可以把能量攒起来,最后把怪物一起打死。设怪物总血量为 ,把能量和为 的怪物都用冰打死,需要耗费 的时间;把剩下的怪物(能量和为 的怪物)都用火打死,需要耗费 时间。所以我们把能量和为 的怪物都用冰打死,剩下的用火打死,总共要耗费 的时间。我们只要枚举每个可能的 即可。
枚举每个可行的 ,我们可以用背包问题解决。当然,为了优化常数你也可以用 bitset 进行优化。
代码
# include <bits/stdc++.h>
using namespace std;
int t, w, f, minx, a[105], sum, n;
bitset <1000005> dp;
int main () {
cin >> t;
while (t --) {
cin >> w >> f >> n;
sum = 0, minx = 1e9; //多组数据要清零
dp.reset (); //多组数据要清空
dp.set (0, 1); //多组数据要初始化
for (int i = 0; i < n; ++ i)
cin >> a[i], sum += a[i], dp |= dp << a[i]; //bitset 多方便啊
for (int i = 0; i <= sum; ++ i)
if (dp[i])
minx = min (minx, max ((i + w - 1) / w, (sum - i + f - 1) / f));
cout << minx << '\n';
}
return 0;
}

浙公网安备 33010602011771号