题目链接
    image.png
    位数是奇数,先手不一定能够赢。{1,200,2}。
    image.png
    上面,先手拿的话,使用贪心算法局部最优也是无法赢得石子游戏的。先拿6对手拿3,无论拿哪个都是输。
    找到每一步最优的分。

    image.png

    1. class Solution {
    2. public boolean stoneGame(int[] arr) {
    3. int sum = 0;
    4. for(int i : arr) {
    5. sum+=i;
    6. }
    7. int p1 = maxScore(arr, 0, arr.length-1);
    8. return p1>sum-p1;
    9. }
    10. // 递归超时。。。
    11. public int maxScore(int[] arr, int l, int r) {
    12. if(l == r) return arr[l];
    13. int sLeft = 0, rRight = 0;
    14. if(r-l == 1) {
    15. sLeft = arr[l];
    16. rRight = arr[r];
    17. }
    18. if(r-l >= 2) {
    19. // sLeft = arr[l] + Math.min(maxScore(arr, l+2, r), maxScore(arr, l+1, r-1));
    20. // rRight = arr[r] + Math.min(maxScore(arr, l+1, r-1), maxScore(arr, l, r-2));
    21. int temp = maxScore(arr, l+1, r-1);
    22. sLeft = arr[l] + Math.min(maxScore(arr, l+2, r), temp);
    23. rRight = arr[r] + Math.min(temp, maxScore(arr, l, r-2));
    24. }
    25. return Math.max(sLeft, rRight);
    26. }
    27. }