介绍
动态规划(英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。
动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。动态规划往往用于优化递归问题。
核心点:一定要分解到子问题,子问题往往是可解的。
类似从简单问题扩散到最终解。
例子
从(0,0)点移动到(6,8),每次只能移动一步,要么往上,要么往右。请问有多少种走法。
典型动态规划题目:
假设 s(i,j)代表ij点的走法总数,那么他的走法是s(i,j-1)和s(i-1,j)的总和。 这一步就是分解为子问题的过程。
注意理解,所有动态规划的就是要找到这个过程。
其余的则是程序实现了。
def dp_move():
s = np