2435. 矩阵中和能被 K 整除的路径
This commit is contained in:
parent
0babcf1472
commit
1da8b6b735
54
src/main.rs
54
src/main.rs
|
|
@ -1,50 +1,30 @@
|
||||||
use crate::arr::make_string_arr;
|
use crate::arr::make_matrix;
|
||||||
use std::cmp::max;
|
|
||||||
|
|
||||||
struct Solution;
|
struct Solution;
|
||||||
mod arr;
|
mod arr;
|
||||||
impl Solution {
|
impl Solution {
|
||||||
pub fn find_max_form(strs: Vec<String>, m: i32, n: i32) -> i32 {
|
pub fn number_of_paths(grid: Vec<Vec<i32>>, k: i32) -> i32 {
|
||||||
let mut dp = vec![vec![0; m as usize + 1]; n as usize + 1];
|
let mut arr = vec![vec![vec![0; k as usize]; grid[0].len()]; grid.len()];
|
||||||
fn get_count(str: &String) -> (i32, i32) {
|
let r#mod = 1e9 as i32 + 7;
|
||||||
let (mut zeros, mut ones) = (0, 0);
|
arr[0][0][(grid[0][0] % k) as usize] = 1;
|
||||||
for c in str.chars() {
|
for i in 0..grid.len() {
|
||||||
if c == '0' {
|
for j in 0..grid[i].len() {
|
||||||
zeros += 1;
|
if i < grid.len() - 1 {
|
||||||
} else {
|
for l in 0..k {
|
||||||
ones += 1;
|
arr[i + 1][j][((l + grid[i + 1][j]) % k) as usize] = (arr[i + 1][j][((l + grid[i + 1][j]) % k) as usize] + arr[i][j][l as usize]) % r#mod;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
if j < grid[0].len() - 1 {
|
||||||
(zeros, ones)
|
for l in 0..k {
|
||||||
}
|
arr[i][j + 1][((l + grid[i][j + 1]) % k) as usize] = (arr[i][j + 1][((l + grid[i][j + 1]) % k) as usize] + arr[i][j][l as usize]) % r#mod;
|
||||||
let mut strs = strs
|
}
|
||||||
.iter()
|
|
||||||
.map(|x| get_count(x))
|
|
||||||
.collect::<Vec<(i32, i32)>>();
|
|
||||||
// n1 m0
|
|
||||||
// 外1内0
|
|
||||||
|
|
||||||
for i in 0..strs.len() {
|
|
||||||
let (zeros, ones) = strs[i];
|
|
||||||
for i in (ones..=n).rev() {
|
|
||||||
for k in (zeros..=m).rev() {
|
|
||||||
dp[i as usize][k as usize] = dp[i as usize][k as usize]
|
|
||||||
.max(dp[(i - ones) as usize][(k - zeros) as usize] + 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let mut ans = 0;
|
arr[grid.len() - 1][grid[0].len() - 1][0]
|
||||||
dp.iter()
|
|
||||||
.for_each(|x| x.iter().for_each(|y| ans = max(ans, *y)));
|
|
||||||
ans
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// dp?
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let result = Solution::find_max_form(
|
let result = Solution::number_of_paths(make_matrix("[[5,2,4],[3,0,5],[0,7,2]]"), 3);
|
||||||
make_string_arr("[\"10\", \"0001\", \"111001\", \"1\", \"0\"]"),
|
|
||||||
5,
|
|
||||||
3,
|
|
||||||
);
|
|
||||||
println!("{:?}", result);
|
println!("{:?}", result);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue