DP(动态规划)本质上是一种利用辅助空间来降低时间复杂度的方法,它利用表来存储中间状态,从而避免子问题的重复计算。DP中辅助空间有两种常见的用法,下面通过一道题来演示。
给出一个包含非负整数的数组。选手1和选手2轮流从该数组取数,每次取数时只能从数组头部或尾部取数,并且取过的数后面不可以再取。当所有数都被取完时,统计两个选手各自所取数的和,和较大的选手获胜。选手1先取,求选手1能否获胜(当两个选手数的和相等是也算选手1胜)。例如:
Input: [1, 5, 2]
Output: False
Explanation: Initially, player 1 can choose between 1 and 2.
If he chooses 2 (or 1), then player 2 can choose from 1 (or 2) and 5. If player 2 chooses 5, then player 1 will be left with 1 (or 2).
So, final score of player 1 is 1 + 2 = 3, and player 2 is 5.
Hence, player 1 will never be the winner and you need to return False.
Input: [1, 5, 233, 7]
Output: True
Explanation: Player 1 first chooses 1. Then player 2 have to choose between 5 and 7. No matter which number player 2 choose, player 1 can choose 233.
Finally, player 1 has more score (234) than player 2 (12), so you need to return True representing player1 can win.
限制:数组长度的范围为[1, 20],数组元素为非负整数并且不会超过10,000,000。
---------------------------
一、DP辅助空间用法之“递归 + 缓存”
1、题目规定取到的数之和较大者胜,而数组中所有数之和又可以直接求出