1686. 石子游戏 VI
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8a3a81123b25e722a43d1179486da771.png)
代码实现
class Solution {
public:
int stoneGameVI(vector<int>& aliceValues, vector<int>& bobValues) {
int n = aliceValues.size();
vector<int> seq(n);
for (int i = 0; i < n; i++) {
seq[i] = i;
}
sort(seq.begin(), seq.end(), [&](int& a, int& b) {
return aliceValues[a] + bobValues[a] > aliceValues[b] + bobValues[b];
});
int aliceTotalScore = 0, bobTotalScore = 0;
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
aliceTotalScore += aliceValues[seq[i]];
}
else {
bobTotalScore += bobValues[seq[i]];
}
}
return aliceTotalScore > bobTotalScore ? 1 : (aliceTotalScore ==
bobTotalScore ? 0 : -1);
}
};
1690. 石子游戏 VII
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/025a903542038bad9f5849fec0f92685.png)
代码实现
class Solution {
public:
int stoneGameVII(vector<int>& stones) {
int n = stones.size();
vector<int> sum(n);
sum[0] = stones[0];
for (int i = 1; i < n; i++) {
sum[i] = sum[i - 1] + stones[i];
}
vector<vector<int>> dp(n, vector<int>(n));
for (int i = n - 2; i >= 0; i--) {
for (int j = i + 1; j < n; j++) {
if (i != 0)
dp[i][j] = max(sum[j] - sum[i - 1] - stones[i] - dp[i + 1][j],
sum[j] - sum[i - 1] - stones[j] - dp[i][j - 1]);
else dp[i][j] = max(sum[j] - stones[i] - dp[i + 1][j],
sum[j] - stones[j] - dp[i][j - 1]);
}
}
return dp[0][n - 1];
}
};
1872. 石子游戏 VIII
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ba9932a4ad7400d76b0097a1002a3455.png)
代码实现
class Solution {
public:
int stoneGameVIII(vector<int>& stones) {
int n = stones.size();
vector<int> sum(n + 1);
for (int i = 1; i <= n; i++) {
sum[i] = sum[i - 1] + stones[i - 1];
}
vector<int> dp(n + 1, INT_MIN);
dp[n] = sum[n];
for (int i = n - 1; i >= 1; i--) {
dp[i] = max(dp[i + 1], sum[i] - dp[i + 1]);
}
return dp[2];
}
};
2029. 石子游戏 IX
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a417abd846e70dfd64ced3350a26c330.png)
代码实现
class Solution {
public:
bool stoneGameIX(vector<int>& stones) {
int cnt0 = 0, cnt1 = 0, cnt2 = 0;
for (int val: stones) {
if (int type = val % 3; type == 0) {
++cnt0;
}
else if (type == 1) {
++cnt1;
}
else {
++cnt2;
}
}
if (cnt0 % 2 == 0) {
return cnt1 >= 1 && cnt2 >= 1;
}
return cnt1 - cnt2 > 2 || cnt2 - cnt1 > 2;
}
};