动态规划理解

关于动态规划

第一次了解动态规划,是大学的时候,我本科是合工大,研究生的目标是天津大学,原谅我政治没有过线,没有考上~尴尬

管理科学与工程,专业课是运筹学,最短路径问题就是动态规划的典型代表。

算法其实就是数学的另类生存

所以想解决问题的时候,我更加建议大家先想想如何用数学方程式解决问题,然后再把数学方程式转换成算法。

动态规划实质

我只说我理解的哈

动态规划的标杆应该是分段处理问题,特别适用于那种过程类问题,上下嵌套很多,一环套一环的那种。

两个比较经典的例子:最短路径,爬楼梯

他的要求呢就是,每到一个环节,可以找到到这个环节的最优解,然后在进行下一步,就如下面这个。到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];
    }
}

 

posted @ 2022-01-21 17:02  哦咯哦咯  阅读(72)  评论(0)    收藏  举报