結果
| 問題 | No.2889 Rusk |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-09-13 22:32:57 |
| 言語 | Rust (1.99.0 + proconio + num + itertools + ACL) |
| 結果 |
WJ
不安定
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,024 bytes |
| 記録 | |
| 最終ジャッジ日時 | 2026-08-26 14:23:57 |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_0 |
(要ログイン)
ソースコード
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);
}