Skip to content

Commit

Permalink
pastbook2 dp_u
Browse files Browse the repository at this point in the history
  • Loading branch information
bouzuya committed Jul 4, 2023
1 parent d4e31a2 commit 9ed542d
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 0 deletions.
5 changes: 5 additions & 0 deletions cargo-compete/pastbook2/Cargo.toml
Expand Up @@ -29,6 +29,7 @@ edition = "2018"
143 = { alias = "pastbook2022_c", problem = "https://atcoder.jp/contests/pastbook2022/tasks/pastbook2022_c" }
146 = { alias = "dp_p", problem = "https://atcoder.jp/contests/dp/tasks/dp_p" }
149 = { alias = "dp_s", problem = "https://atcoder.jp/contests/dp/tasks/dp_s" }
154 = { alias = "dp_u", problem = "https://atcoder.jp/contests/dp/tasks/dp_u" }

[[bin]]
name = "027"
Expand Down Expand Up @@ -126,6 +127,10 @@ path = "src/bin/146.rs"
name = "149"
path = "src/bin/149.rs"

[[bin]]
name = "154"
path = "src/bin/154.rs"

[dependencies]
num = "=0.2.1"
num-bigint = "=0.2.6"
Expand Down
1 change: 1 addition & 0 deletions cargo-compete/pastbook2/README.md
Expand Up @@ -25,3 +25,4 @@
- P.143 各部分木の大きさ (オリジナル問題) <https://atcoder.jp/contests/pastbook2022/tasks/pastbook2022_c>
- P.146 Independent Set (Educational DP Contest:P問題) <https://atcoder.jp/contests/dp/tasks/dp_p>
- P.149 Digit Sum (Educational DP Contest:S問題) <https://atcoder.jp/contests/dp/tasks/dp_s>
- P.154 Grouping (Educational DP Contest:U問題) <https://atcoder.jp/contests/dp/tasks/dp_u>
35 changes: 35 additions & 0 deletions cargo-compete/pastbook2/src/bin/154.rs
@@ -0,0 +1,35 @@
use proconio::input;

fn main() {
input! {
n: usize,
a: [[i64; n]; n],
}

let mut score = vec![0_i64; 1 << n];
for (s, score_s) in score.iter_mut().enumerate() {
for (i, a_i) in a.iter().enumerate() {
for j in i + 1..n {
if ((s & (1 << i)) != 0) && ((s & (1 << j)) != 0) {
*score_s += a_i[j];
}
}
}
}

let mut dp = vec![0_i64; 1 << n];
for s in 0_usize..(1 << n) {
// 集合 s の部分集合 t を走査
let mut prev = None;
let mut t = s;
while prev != Some(t) {
t &= s;
dp[s] = dp[s].max(dp[t] + score[s ^ t]);
prev = Some(t);
t = t.saturating_sub(1);
}
}

let ans = dp[(1 << n) - 1];
println!("{}", ans);
}

0 comments on commit 9ed542d

Please sign in to comment.