1use std::cmp;23impl Solution {4pub fn max_sum_after_partitioning(arr: Vec<i32>, k: i32) -> i32 {5let mut k = k as usize;6let n: usize = arr.len();7let mut dp: Vec<i32> = vec![0; n + 1];8dp[1] = arr[0];9for i in 2..n + 1 as usize {10let mut max_so_far: i32 = arr[i - 1];11for j in 1..k + 1 as usize {12if i < j {13break;14}15max_so_far = cmp::max(max_so_far, arr[i - j]);16dp[i] = cmp::max(dp[i], dp[i - j] + (j as i32) * max_so_far);17}18}19dp[n]20}21}