【学习笔记】dp入门
知识点 动态规划(简称dp),可以说是各种程序设计中遇到的第一个坎吧,这篇博文是我对dp的一点点理解,希望可以帮助更多人dp入门。 先看看这段话 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。1957年出版了他的名著《Dynamic Programming》,这是该领域的第一本著作。 这是百度百科上对于动态规划介绍,其实dp并没有这么复杂,可以把dp看作是记忆化搜索的递推形式。 再来看一下下面这段文字(来自 《挑战程序设计竞赛(第二版)》 ): 就像上面所说的,对于一道题目,如果选择搜索可能会出现大量重复的状态,如函数f int f(int a,int b) { return f(a+1,b+1)+f(a-1,b-1); } 这种函数在计算过程中有大量的资源被浪费,如 f(1,1) 和 f(3,3) 在返回值时都会计算一次 f(2,2)