椅子を買った。回転できないのがつらかった。たぶんまた書く。
- PAST #3 H - ハードル走 (第三回 アルゴリズム実技検定 H問題)
https://atcoder.jp/contests/past202005-open/tasks/past202005_h
- https://atcoder.jp/contests/past202005-open/submissions/40749612
- DP
- 0.5 は扱いづらいので距離をすべて 2 倍する
- 行動が開始できる位置はジャンプ中でなくかつ↑の偶数位置に限られている
- ジャンプ中の時間についてもゴールを考慮して保持しておく必要がある
- ゴール位置だけを保持すれば十分そうではある
- ジャンプ中の状態を保持しないならカエルと大差なさそう
use proconio::input; macro_rules! chmin { ($min_v: expr, $v: expr) => { if $v < $min_v { $min_v = $v; true } else { false } }; } fn main() { input! { n: usize, l: usize, x: [usize; n], t: [usize; 3], } let mut y = vec![false; 2 * l + 8 + 1]; for x_i in x { y[2 * x_i] = true; } let (t1, t2, t3) = (t[0] / 2, t[1] / 2, t[2]); let inf = 1_usize << 60; let mut dp = vec![vec![inf; 2]; 2 * l + 8 + 1]; dp[0][0] = 0_usize; for i in (0..=2 * l).step_by(2) { chmin!( dp[i + 2][0], dp[i][0] + t1 + t1 + if y[i + 2] { t3 } else { 0 } ); chmin!( dp[i + 4][0], dp[i][0] + t1 + t2 * 2 + t1 + if y[i + 4] { t3 } else { 0 } ); chmin!( dp[i + 8][0], dp[i][0] + t1 + t2 * 6 + t1 + if y[i + 8] { t3 } else { 0 } ); chmin!(dp[i + 2][1], dp[i][0] + t1 + t2); chmin!(dp[i + 3][1], dp[i][0] + t1 + t2 * 2); chmin!(dp[i + 4][1], dp[i][0] + t1 + t2 * 3); chmin!(dp[i + 5][1], dp[i][0] + t1 + t2 * 4); chmin!(dp[i + 6][1], dp[i][0] + t1 + t2 * 5); chmin!(dp[i + 7][1], dp[i][0] + t1 + t2 * 6); } let ans = *dp[2 * l].iter().min().unwrap(); println!("{}", ans); }
Hades 弓で失敗。
今日のコミット。
- tsukota 1 commit
- rust-atcoder 1 commit