1. 动态规划

百度百科:动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。 20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时, 提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。 1957年出版了他的名著《Dynamic Programming》,这是该领域的第一本著作。

通常用凑钱的例子来说明:

假设有面值 1元,5元,11元,个数无限,现在想凑15元,怎么凑才能使钱的个数最少

  1. 1元 * 15个 = 15元 总共15个
  2. 1元 10个 + 5元 1个 = 15元 总共11个
  3. 1元 5个 + 5元 2个 = 15元 总共7个
  4. 1元 4个 + 11元 1个 = 15元 总共5个
  5. 5元 * 3个 = 15元 总共3个

以上是暴力列举,把所有可能都列举出来!

如果用动态规划怎么理解呢?

已知需要凑15元,已知有面值 1元,5元,11元

那么

  • 15 = 1元 + f(14) 等于 1次 + f(14)次数
  • 15 = 5元 + f(10) 等于 1次 + f(10)次数
  • 15 = 11元 + f(4) 等于 1次 + f(4) 次数

现在要 求的是 f(14) 和 f(10) 和 f(4) 谁次数最少

简而言之,暴力解法一般都是从开头开始试,一直试到结束,动态规划是先知道结果,从结果往前推导,但代码不一定能这么写..

目前我的理解是,先不管什么分治啊什么的.. 就是已知当前这个是最优,记录它的状态,下一个(或者上一个)根据这个求得它的最优

哈哈。。 我想了两天,没想出来。。。 待我再想想这个题怎么解。。。

可参考其他的几个例子做一做

爬楼梯

最大子序和

results matching ""

    No results matching ""