动态规划适用于有以下特征的问题场景:
- 最优子结构
- 重叠子问题
DP经典问题
子集和问题
问题描述1
给定一个正整数集合,从中找到子集和最大的值,要求子集的元素必须是不相邻元素(一旦元素被选中,则其左右的元素都不能被选),返回子集和。
e.g.
arr = {4, 1, 1, 9, 1}
返回 13
思路
设dp[i]为前i个元素所能得到的最大值,则
d p [ i ] = m a x { d p [ i − 1 ] ( 不 选 a r r [ i ] ) d p [ i − 2 ] + a r r [ i ] ( 选 a r r [ i ] ) dp[i]=max\begin{cases} dp[i-1](不选arr[i])\\ dp[i-2]+arr[i](选arr[i])\end{cases} dp[i]=max{
dp[i−1](不选arr[i])