2023-06-08 家庭保育 2 / 日本情報オリンピック 本選 2016:A問題 を解いた
また家庭保育。上の子から下の子にうつったっぽい……。そして今日は雨の中送迎。子どもが保育所にカバンを忘れて……。次はぼくかな。
- オレンジの出荷 (日本情報オリンピック 本選 2016:A問題)
https://atcoder.jp/contests/joi2016ho/tasks/joi2016ho_a
- https://atcoder.jp/contests/joi2016ho/submissions/42078553
- 解説 AC
- 区間分割 DP
- 一つ前の問題と同じ考え方なのはわかっているはずなのに解けず
- cost を前計算できることさえ見えず
use proconio::input;
fn main() {
input! {
n: usize,
m: usize,
k: usize,
a: [usize; n],
}
let mut cost = vec![vec![0; m + 1]; n];
for i in 0..n {
let (mut min, mut max) = (1 << 60, 0);
for j in i..(i + m).min(n) {
let len = j - i + 1;
min = min.min(a[j]);
max = max.max(a[j]);
cost[i][len] = k + (max - min) * len;
}
}
let inf = 1_usize << 60;
let mut dp = vec![inf; n + 1];
dp[0] = 0_usize;
for i in 1..=n {
for j in i.saturating_sub(m)..i {
dp[i] = dp[i].min(dp[j] + cost[j][i - j]);
}
}
let ans = dp[n];
println!("{}", ans);
}
今日のコミット。