/** * [1690] Stone Game VII */ pub struct Solution {} // submission codes start here impl Solution { pub fn stone_game_vii(stones: Vec) -> i32 { let n = stones.len(); let mut sum = vec![0; n + 1]; for (index, value) in stones.iter().enumerate() { sum[index + 1] = sum[index] + *value; } let mut dp = vec![vec![0; n]; n]; for i in (0..=n - 2).rev() { for j in i + 1..n { dp[i][j] = (sum[j + 1] - sum[i + 1] - dp[i + 1][j]).max(sum[j] - sum[i] - dp[i][j - 1]); } } dp[0][n - 1] } } // submission codes end #[cfg(test)] mod tests { use super::*; #[test] fn test_1690() { assert_eq!(Solution::stone_game_vii(vec![5, 3, 1, 4, 2]), 6); } }