第3回 アルゴリズム実技検定 過去問 (PAST 003)
Table of Contents
https://atcoder.jp/contests/past202005-open
H - ハードル走
自力 AC.
void solve() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
ll N, L;
cin >> N >> L;
vll X(N);
rep(i, N) cin >> X[i];
ll T1, T2, T3;
cin >> T1 >> T2 >> T3;
vll hurdles(L + 1);
for (ll x : X)
hurdles[x] = 1;
vll dp(L + 1, INF);
dp[0] = 0;
rep2(i, 1, L + 1) {
ll offset = hurdles[i] * T3;
chmin(dp[i], dp[i - 1] + T1 + offset);
if (i - 2 >= 0) {
chmin(dp[i], dp[i - 2] + T1 + T2 + offset);
}
if (i - 4 >= 0) {
chmin(dp[i], dp[i - 4] + T1 + T2 * 3 + offset);
}
// ジャンプして超える
if (i == L) {
if (i - 3 >= 0) {
chmin(dp[i], dp[i - 3] + T1 / 2 + T2 / 2 * 5);
}
if (i - 2 >= 0) {
chmin(dp[i], dp[i - 2] + T1 / 2 + T2 / 2 * 3);
}
if (i - 1 >= 0) {
chmin(dp[i], dp[i - 1] + T1 / 2 + T2 / 2);
}
}
}
cout << dp[L] << endl;
}