[1,2,100,8]纸牌游戏,有A、B两个玩家,先手后手都是只能从左边,右边拿。谁分多胜。

    1. // 根据规则,返回获胜者的分数
    2. public static int win1(int[] arr) {
    3. if (arr == null || arr.length == 0) {
    4. return 0;
    5. }
    6. int first = f1(arr, 0, arr.length - 1);
    7. int second = g1(arr, 0, arr.length - 1);
    8. return Math.max(first, second);
    9. }
    10. // arr[L..R],先手获得的最好分数返回
    11. public static int f1(int[] arr, int L, int R) {
    12. if (L == R) {
    13. return arr[L];
    14. }
    15. int p1 = arr[L] + g1(arr, L + 1, R);
    16. int p2 = arr[R] + g1(arr, L, R - 1);
    17. return Math.max(p1, p2);
    18. }
    19. // // arr[L..R],后手获得的最好分数返回
    20. public static int g1(int[] arr, int L, int R) {
    21. if (L == R) {
    22. return 0;
    23. }
    24. int p1 = f1(arr, L + 1, R); // 对手拿走了L位置的数
    25. int p2 = f1(arr, L, R - 1); // 对手拿走了R位置的数
    26. return Math.min(p1, p2);
    27. }