好吧,这次没有调出来,所以还是记录一下
但它和黑妹的游戏II 是非常相似的
思路:
对于ALICE和BOB,每次获得的分数即为前缀和,那么
令dp[i]表示当前选择i的人能获得的当前分数-对手分数的最大差值
倒推,dp[i] = max(dp[i],sum[i] - dp[i+1]);
而因为选择个数>=2,则对于ALICE来说1必选
故答案为dp[1]

但是为什么初始化不同呢?
因为在黑妹的游戏这里,对手的状态在我的状态之后
而本题中,我的状态在对手的状态之后
所以初始化是不同的

class Solution {
public:
    int stoneGameVIII(vector<int>& stones) {
        vector<int> psum(stones.size()+1, 0);
        int n=stones.size();
        for (int i=0; i<n; ++i) {
            psum[i+1]=psum[i]+stones[i];
        }
        vector<int> dp(stones.size(), 0);
        int mx=psum[n];
        for (int i=n-1; ~i; --i) {
            dp[i]=mx;
            mx=max(mx, psum[i]-dp[i]);
        }
        return dp[1];
    }
};