1class Solution {2public:3int dp[501][501];45int f(vector<int> &v, int i, int j) {6if (i >= j) return 0;78if (dp[i][j] != -1) return dp[i][j];910int r = 0;11for (int k = i; k <= j; k++) r += v[k];1213int l = 0, ans = 0;14for (int k = i; k <= j; k++) {15l += v[k];16r -= v[k];17if (l < r)18ans = max(ans, l + f(v, i, k));19else if (r < l)20ans = max(ans, r + f(v, k + 1, j));21else22ans = max(ans, max(l + f(v, i, k), r + f(v, k + 1, j)));23}24return dp[i][j] = ans;25}2627int stoneGameV(vector<int> &stoneValue) {28memset(dp, -1, sizeof(dp));29return f(stoneValue, 0, stoneValue.size() - 1);30}31};