D - シューティング / Shooting Editorial
by
nok0
Editorial for printing
アイテム \(1,2\) の使う順番について考えます。
アイテム \(2\) は、敵の体力が大きいほど敵の体力を大きく削れてることから、先に使う方がよいです。
よってアイテム \(2\) を使う -> アイテム \(1\) を使う が最適であることが分かります。
また、アイテム \(2\) を使う回数について考えると、敵の体力が毎回半分以下になるので、\(\mathrm{O}(\log N)\) 回使えば敵の体力を \(0\) に出来ることが分かります。
このことから、アイテム \(2\) を使う回数を全探索することでこの問題を解くことができます。
実装例(C++):
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ll h, a, b, c, d;
cin >> h >> a >> b >> c >> d;
ll tmp = 0;
ll res = (h + a - 1) / a * b;
for (int i = 0; i < 30; i++) {
h -= c;
if (h >= 0) h -= h / 2;
tmp += d;
if (h <= 0) {
res = min(res, tmp);
break;
}
res = min(res, tmp + (h + a - 1) / a * b);
}
cout << res << endl;
}
posted:
last update: