1.定义
动态规划(英语:Dynamic planning,简称 DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。
2.核心思想
把一个复杂问题不断拆分为子问题,逐个来解决。
万能公式:
- dp[i],dp[i][j]表示的含义;
- dp转换状态:dp[i] = f(dp[j])
- base case,即出口
3.例子
对于数列arr = [1,2,4,1,7,8,3],如何选择才能使得到的值最大,限制:相邻元素不可取。
import numpy as np
arr = [1,2,4,1,7,8,3]
def dp_opt(arr):
opt = np.zeros(len(arr)) #用0占位
opt[0] = arr[0] #出口
opt[1] =max(arr[0],arr[1]) #出口
for i in range(2,len(arr)):
A = opt[i-2] + arr[i] #递归式子
B = opt[i-1]
opt[i] = max(A,B)
return opt[len(arr)-1]
print(dp_opt(arr))
对于数列arr = [3,34,4,12,5,2],取出几个数字,使得相加为9。