1、问题描述
给定一个数组nums,a、b两人轮流从数组的左端或右端取一个数作为自己的得分,假设两人足够聪明,都采用最优的策略取数,且a先取,问a能能拿到的最大的分数是多少?
示例:
输入:nums=[4,7,5,3]
输出:10
解释:a能拿到的最大分数为7+3=10.
2、解题思路
分析:由题意,我们可以明确以下几点:
(1) 当选手 a a a、 b b b在子数组 n u m s [ i , . . . , j ] nums[i,...,j] nums[i,...,j]中取数时,无论怎么取, a a a、 b b b最终的得分之和总是一个固定值,这个固定值等于子数组的所有元素之和;
(2) 假设 d p [ i ] [ j ] dp[i][j] dp[i][j]表示 a a a选手在子数组 n u m s [ i , . . . , j ] nums[i,...,j] nums[i,...,j]取数时的最优解,由于 b b b选手每次也是选择最优的解,所以 d p [ i + 1 ] [ j ] dp[i+1][j] dp[i+1][j]或者 d p [ i ] [ j − 1 ] dp[i][j-1]