1class Solution {2public:3int solve(vector<int> &piles, int i, int j, vector<vector<int>> &dp) {4if (i == j) return piles[i];56if (dp[i][j] != -1) return dp[i][j];78return dp[i][j] = max((piles[i] + solve(piles, i + 1, j, dp)),9(piles[j] + solve(piles, i, j - 1, dp)));10}1112bool stoneGame(vector<int> &piles) {13int n = piles.size();14vector<vector<int>> dp(n, vector<int>(n, -1));15return solve(piles, 0, n - 1, dp);16}17};