Minimum Cost to Connect Two Groups of Points LeetCode solution in Rust
1impl Solution {2pub fn connect_two_groups(cost: Vec<Vec<i32>>) -> i32 {3let (s1, s2) = (cost.len(), cost[0].len());45let min = (0..s2)6.map(|j| (0..s1).fold(i32::MAX, |acc, i| acc.min(cost[i][j])))7.collect::<Vec<_>>();89let mut dp = (0..2_usize.pow(s2 as u32))10.map(|m| {11let mut cost = 0;12for b in 0..s2 {13if (m >> b) & 1 == 1 {14continue;15};16cost += min[b];17}18cost19})20.collect::<Vec<_>>();2122for i in (0..s1) {23let mut new = vec![i32::MAX; 2_usize.pow(s2 as u32)];24for m in (0..2_usize.pow(s2 as u32)) {25for b in (0..s2) {26new[m] = new[m].min(cost[i][b] + dp[m | (1 << b)]);27}28}29dp = new;30}31dp[0]32}33}