区间dp
class Solution {
public:
bool stoneGame(vector<int>& piles) {
int N = piles.size();
// dp[L][R] 表示[L][R] 区间先手最大和后手最大
int dpA[N+1][N+1];
int dpB[N+1][N+1];
memset(dpA,0,sizeof(dpA));
memset(dpB,0,sizeof(dpB));
for(int l = N-1;l >=0; l--){
dpA[l][l] = piles[l];
for(int r=l+1;r<N;r++){
dpA[l][r] = max(dpB[l+1][r] + piles[l],dpB[l][r-1] + piles[r]);
dpB[l][r] = min(dpA[l+1][r],dpA[l][r-1]);
}
}
return dpA[0][N-1] > dpB[0][N-1];
}
};