- EDPC D - Knapsack 1 (AtCoder Educational DP Contest D問題)
https://atcoder.jp/contests/dp/tasks/dp_d
- https://atcoder.jp/contests/dp/submissions/40766226
- ナップサック DP
dp[i][j] := i 番目までの品物で重さ j のときの価値の最大値
と置く- 品物を順に走査して各重さ j に対して品物を入れたときと入れなかったときの価値の最大値を更新する
dp[n]
の最大値が答えになる
use proconio::input; macro_rules! chmax { ($max_v: expr, $v: expr) => { if $v > $max_v { $max_v = $v; true } else { false } }; } fn main() { input! { capital_n: usize, capital_w: usize, wv: [(usize, usize); capital_n], } let mut dp = vec![vec![0; capital_w + 1]; capital_n + 1]; for (i, (w, v)) in wv.iter().copied().enumerate() { for j in 0..=capital_w { chmax!( dp[i + 1][j], dp[i][j].max(if j < w { 0 } else { dp[i][j - w] + v }) ); } } let ans = dp[capital_n].iter().copied().max().unwrap(); println!("{}", ans); }
頭が痛い。早く寝る。
今日のコミット。
- tsukota 1 commit
- rust-atcoder 1 commit
- react-navigation.github.io 0 commit