結果
| 問題 |
No.2889 Rusk
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-09-13 22:32:57 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 61 ms / 2,000 ms |
| コード長 | 1,024 bytes |
| コンパイル時間 | 14,172 ms |
| コンパイル使用メモリ | 376,496 KB |
| 実行使用メモリ | 28,800 KB |
| 最終ジャッジ日時 | 2024-09-13 22:33:17 |
| 合計ジャッジ時間 | 17,792 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 52 |
ソースコード
use proconio::input;
const NUM_STATES: usize = 5;
fn main() {
input! {
n: usize,
aa: [usize; n],
bb: [usize; n],
cc: [usize; n],
}
let mut dp1 = vec![[0_usize; NUM_STATES]; n + 1];
for i in 0..n {
let weights = [aa[i], bb[i], cc[i], bb[i], aa[i]];
for state in 0..NUM_STATES {
for next_state in state..NUM_STATES {
dp1[i + 1][next_state] =
dp1[i + 1][next_state].max(dp1[i][state] + weights[next_state]);
}
}
}
let mut dp2 = vec![[0_usize; NUM_STATES]; n + 1];
for i in 0..n {
let weights = [aa[i], bb[i], aa[i], bb[i], aa[i]];
for state in 0..NUM_STATES {
for next_state in state..NUM_STATES {
dp2[i + 1][next_state] =
dp2[i + 1][next_state].max(dp2[i][state] + weights[next_state]);
}
}
}
let ans = dp1[n][2..].iter().chain(&dp2[n][3..]).max().unwrap();
println!("{}", ans);
}