DP中辅助空间的两种常见用法

本文探讨了动态规划(DP)中辅助空间的两种常见用法,通过一个具体的例子展示了如何利用递归+缓存以及迭代+表来解决问题。在递归解法中,使用Map缓存子问题的解,降低空间复杂度至O(n);而在迭代解法中,通过二维数组存储中间状态,优化空间开销至O(n),时间复杂度均为O(n^2)。
摘要由CSDN通过智能技术生成

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、题目规定取到的数之和较大者胜,而数组中所有数之和又可以直接求出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值