From 1da8b6b735571b212a10996b0f5109d30090f439 Mon Sep 17 00:00:00 2001 From: li-chx Date: Wed, 26 Nov 2025 08:56:35 +0800 Subject: [PATCH] =?UTF-8?q?2435.=20=E7=9F=A9=E9=98=B5=E4=B8=AD=E5=92=8C?= =?UTF-8?q?=E8=83=BD=E8=A2=AB=20K=20=E6=95=B4=E9=99=A4=E7=9A=84=E8=B7=AF?= =?UTF-8?q?=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 54 +++++++++++++++++------------------------------------ 1 file changed, 17 insertions(+), 37 deletions(-) diff --git a/src/main.rs b/src/main.rs index fb73305..ed1f9dd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,50 +1,30 @@ -use crate::arr::make_string_arr; -use std::cmp::max; +use crate::arr::make_matrix; struct Solution; mod arr; impl Solution { - pub fn find_max_form(strs: Vec, m: i32, n: i32) -> i32 { - let mut dp = vec![vec![0; m as usize + 1]; n as usize + 1]; - fn get_count(str: &String) -> (i32, i32) { - let (mut zeros, mut ones) = (0, 0); - for c in str.chars() { - if c == '0' { - zeros += 1; - } else { - ones += 1; + pub fn number_of_paths(grid: Vec>, k: i32) -> i32 { + let mut arr = vec![vec![vec![0; k as usize]; grid[0].len()]; grid.len()]; + let r#mod = 1e9 as i32 + 7; + arr[0][0][(grid[0][0] % k) as usize] = 1; + for i in 0..grid.len() { + for j in 0..grid[i].len() { + if i < grid.len() - 1 { + for l in 0..k { + 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; + } } - } - (zeros, ones) - } - let mut strs = strs - .iter() - .map(|x| get_count(x)) - .collect::>(); - // 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); + if j < grid[0].len() - 1 { + 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 ans = 0; - dp.iter() - .for_each(|x| x.iter().for_each(|y| ans = max(ans, *y))); - ans + arr[grid.len() - 1][grid[0].len() - 1][0] } } -// dp? fn main() { - let result = Solution::find_max_form( - make_string_arr("[\"10\", \"0001\", \"111001\", \"1\", \"0\"]"), - 5, - 3, - ); + let result = Solution::number_of_paths(make_matrix("[[5,2,4],[3,0,5],[0,7,2]]"), 3); println!("{:?}", result); }