5
int playGame(vector<int> &stones, bool alice, bool bob, int i) {6
if (i >= stones.size()) return 0;11
if (dp[i][alice][bob] != -1) return dp[i][alice][bob];15
for (int idx = i; idx < i + 3 && idx < stones.size(); idx++) {17
ans = max(ans, sum + playGame(stones, false, true, idx + 1));23
for (int idx = i; idx < i + 3 && idx < stones.size(); idx++) {25
ans = min(ans, playGame(stones, true, false, idx + 1));29
return dp[i][alice][bob] = ans;32
string stoneGameIII(vector<int> &stoneValue) {33
memset(dp, -1, sizeof dp);35
for (auto i : stoneValue) totalScore += i;36
int aliceScore = playGame(stoneValue, true, false, 0);37
if (totalScore - aliceScore > aliceScore)39
else if (totalScore - aliceScore < aliceScore)