题目链接
位数是奇数,先手不一定能够赢。{1,200,2}。
上面,先手拿的话,使用贪心算法局部最优也是无法赢得石子游戏的。先拿6对手拿3,无论拿哪个都是输。
找到每一步最优的分。
class Solution {
public boolean stoneGame(int[] arr) {
int sum = 0;
for(int i : arr) {
sum+=i;
}
int p1 = maxScore(arr, 0, arr.length-1);
return p1>sum-p1;
}
// 递归超时。。。
public int maxScore(int[] arr, int l, int r) {
if(l == r) return arr[l];
int sLeft = 0, rRight = 0;
if(r-l == 1) {
sLeft = arr[l];
rRight = arr[r];
}
if(r-l >= 2) {
// sLeft = arr[l] + Math.min(maxScore(arr, l+2, r), maxScore(arr, l+1, r-1));
// rRight = arr[r] + Math.min(maxScore(arr, l+1, r-1), maxScore(arr, l, r-2));
int temp = maxScore(arr, l+1, r-1);
sLeft = arr[l] + Math.min(maxScore(arr, l+2, r), temp);
rRight = arr[r] + Math.min(temp, maxScore(arr, l, r-2));
}
return Math.max(sLeft, rRight);
}
}