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