题目大意:
两个人轮流从一个序列取数,每次只能从两端取走一个数。每个人都采用最优策略,问两人最终所能取到的分数之和分别是多少?
例
输入
4 7 2 9 5 2
输出
18 11
递归方法
public class Main {
public static void main(String[] args) throws Exception {
int[] arr = {4, 7, 2, 9, 5, 2};//18 11
//需要一个函数得到剩余自己能获得的最大值
System.out.println(more(arr, 0, arr.length - 1));
}
public static int more(int[] arr, int s, int e) {//该函数希望自己得到的最多
if(arr==null||arr.length==0)return 0;
if (e - s == 0) return arr[s];//最后一个元素是自己拿
return Math.max(arr[s] + less(arr, s + 1, e), arr[e] + less(arr, s, e - 1));
}
public static int less(int[] arr, int s, int e) {//该函数希望对方得到的最少,返回的是对方能得到的值
if (e - s == 0) return 0;
return Math.min(more(arr, s + 1, e), more(arr, s, e - 1));
}
}
动态规划
https://www.nowcoder.com/questionTerminal/60bed226b2364b628c98f