- 解题思路
使用动态规划阶,其中dpij 表示子数组 pij下alice与bob拿到的石子之差最小值。
- 公式
fij = max(pi - dpi + 1j, pj - dpij- 1;
fii = pi;
- 代码实现
c++
class Solution {
public:
int n;
int dp[510][510];
bool stoneGame(vector<int>& p) {
n = p.size();
for (int i = 0; i < n; i++) dp[i][i] = p[i];
for (int i = n - 2; i >= 0; i--) {
for (int j = i + 1; j < n; j++) {
dp[i][j] = max(p[i] - dp[i + 1][j],
p[j] - dp[i][j - 1]);
}
}
return dp[0][n - 1] > 0;
}
};