3381. 长度可被 K 整除的子数组的最大元素和

This commit is contained in:
li-chx 2025-11-27 08:49:45 +08:00
parent 1da8b6b735
commit 702b016368
1 changed files with 17 additions and 20 deletions

View File

@ -1,30 +1,27 @@
use crate::arr::make_matrix; use std::cmp::max;
struct Solution; struct Solution;
mod arr; mod arr;
impl Solution { impl Solution {
pub fn number_of_paths(grid: Vec<Vec<i32>>, k: i32) -> i32 { pub fn max_subarray_sum(nums: Vec<i32>, k: i32) -> i64 {
let mut arr = vec![vec![vec![0; k as usize]; grid[0].len()]; grid.len()]; let mut temp = 0_i64;
let r#mod = 1e9 as i32 + 7; let k = k as usize;
arr[0][0][(grid[0][0] % k) as usize] = 1; let mut dp = vec![0_i64; nums.len()];
for i in 0..grid.len() { let mut ans = 0_i64;
for j in 0..grid[i].len() { for i in 0..k {
if i < grid.len() - 1 { temp += nums[i] as i64;
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;
}
}
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;
}
}
}
} }
arr[grid.len() - 1][grid[0].len() - 1][0] dp[k - 1] = temp;
ans = temp;
for i in k..nums.len() {
temp = temp + (nums[i] - nums[i - k]) as i64;
dp[i] = temp + if dp[i-k] > 0 { dp[i-k] } else { 0 };
ans = max(ans,dp[i]);
}
ans
} }
} }
fn main() { fn main() {
let result = Solution::number_of_paths(make_matrix("[[5,2,4],[3,0,5],[0,7,2]]"), 3); let result = Solution::max_subarray_sum(vec![-5,1,2,-3,4],2);
println!("{:?}", result); println!("{:?}", result);
} }