public class Test49 { //给定一个整型数组arr,代表数值不同的纸牌排成一条线 //玩家A和玩家B依次拿走每张纸牌 //规定玩家A先拿,玩家B后拿 //但是每个玩家每次只能拿走最左或者最右的纸牌 //玩家A和玩家B都完成最优方案,返回最后胜利者的分数 public static int win1(int[] arr) { if (arr == null || arr.length == 0) { return 0; } //先手分数和后手分数取最大的 return Math.max(f(arr , 0 , arr.length - 1) , s(arr , 0 , arr.length - 1)); } //先手 public static int f(int[] arr , int L , int R) { if (L == R) { return arr[L]; } return Math.max(arr[L] + s(arr , L + 1 , R) , arr[R] + s(arr, L, R - 1)); } //后手 public static int s(int[] arr , int L, int R) { if (L == R) { return 0; } return Math.min(f(arr , L + 1 ,R) , f(arr , L, R - 1)); } }
08-16
999
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)