问题描述:
给定一个整型数组,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿。但是每个玩家每次只能拿走最左或者最右的纸牌,玩家A和B都绝顶聪明,请返回最后获胜者的分数。
解答:
定义一个函数:func(int[] arr)用来表示最优结果,那么针对第一个人是先拿第一张牌还是最后一张牌,分别处理一下。
package DynamicAndRecursive;
public class Puke {
/**
*
*/
public static int puke(int[] arr,int start,int end){
if(arr == null || arr.length == 0 || start > end){
return 0;
}
if(start == end){
return arr[start];
}else{
int value = 0;
for(int i = start; i <= end; i++){
value += arr[i];
}
if ((value - puke(arr,start + 1,end)) >= (value - puke(arr,start,end - 1))){
return value - puke(arr,start + 1,end);
}else{
return value - puke(arr,start,end - 1);
}
}
}
public static void main(String[] args){
int[] arr = {1,2,100,4};
System.out.print(puke(arr,0,arr.length - 1));
}
}