动态规划理解
关于动态规划
第一次了解动态规划,是大学的时候,我本科是合工大,研究生的目标是天津大学,原谅我政治没有过线,没有考上~尴尬
管理科学与工程,专业课是运筹学,最短路径问题就是动态规划的典型代表。
算法其实就是数学的另类生存
所以想解决问题的时候,我更加建议大家先想想如何用数学方程式解决问题,然后再把数学方程式转换成算法。
动态规划实质
我只说我理解的哈
动态规划的标杆应该是分段处理问题,特别适用于那种过程类问题,上下嵌套很多,一环套一环的那种。
两个比较经典的例子:最短路径,爬楼梯
他的要求呢就是,每到一个环节,可以找到到这个环节的最优解,然后在进行下一步,就如下面这个。到B最短就是5,到C最短就是3,然后分别按照B和C再继续往下。

所以呢,这个图实际上就相当于
Dsitance(f) = Min(Dsitance(E) + 5 , Distance(D) + 3);
Dsitance(E) = Min(Distance(D) + 2, Distance(C) + 4);
...
...
Distance(A) = 0;
从而~这个就很简单,需要实现一个函数,然后不断迭代即可,代码可以参考leetcode64,就不放在这儿了。
实例:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
这个是leetcode 70题,个人觉得最适应新手理解动态规划
F(n) = F(n-1) + f(N-2) ; //到达最上层的的只有两个办法,一次上1个,或者一次上2个
F(1) = 1;
F(2) = 2;
class Solution { public int climbStairs(int n) { int[] dp = new int[n + 1]; dp[0] = 1; dp[1] = 1; for(int i = 2; i <= n; i++) { dp[i] = dp[i - 1] + dp[i - 2]; } return dp[n]; } }

浙公网安备 33010602011771号