动态规划

左手的ㄟ右手 2021-11-19 14:14 621阅读 0赞

算法题中动态规划是真的难,写一篇总结,彻底解决动态规划。参考:https://blog.csdn.net/u013309870/article/details/75193592#commentsedit

核心:记住已经解决过的子问题。

  1. A * "1+1+1+1+1+1+1+1 =?" *
  2. A : "上面等式的值是多少"
  3. B : *计算* "8!"
  4. A *在上面等式的左边写上 "1+" *
  5. A : "此时等式的值为多少"
  6. B : *quickly* "9!"
  7. A : "你怎么这么快就知道答案了"
  8. A : "只要在8的基础上加1就行了"
  9. A : "所以你不用重新计算因为你记住了第一个等式的值为8!动态规划算法也可以说是 '记住求过的解来节省时间'"

动态规划有两种方式(自顶向下和自底向上)以斐波那契为例。

自顶向下:

  1. //自顶向下
  2. public static int Fibonacci(int n)
  3. {
  4. if(n<=0)
  5. return n;
  6. int []Memo=new int[n+1];
  7. for(int i=0;i<=n;i++)
  8. Memo[i]=-1;
  9. return fib(n, Memo);
  10. }
  11. public static int fib(int n,int []Memo)
  12. {
  13. if(Memo[n]!=-1)
  14. return Memo[n];
  15. //如果已经求出了fib(n)的值直接返回,否则将求出的值保存在Memo备忘录中。
  16. if(n<=2)
  17. Memo[n]=1;
  18. else Memo[n]=fib( n-1,Memo)+fib(n-2,Memo);
  19. return Memo[n];
  20. }

自底向上:

  1. public static int feibo(int n){
  2. if(n<=0){
  3. return n;
  4. }
  5. int[] temp=new int[n+1];
  6. temp[0]=0;
  7. temp[1]=1;
  8. for(int i=2;i<=n;i++) {
  9. temp[i] = temp[i - 1] + temp[i - 2];
  10. }
  11. return temp[n];
  12. }

例题:è¿éåå¾çæè¿°

发表评论

表情:
评论列表 (有 0 条评论,621人围观)

还没有评论,来说两句吧...

相关阅读

    相关 动态规划

    一:概念: 和分冶法相似,不同之处在于前者是把问题划分为互不相交的子问题,而动态规划会出现子问题重叠的情况。通常用来求解最优化问题。。 基本步骤: ①:刻画一个最优

    相关 动态规划

    -------------------- 动态规划的设计思想 动态规划(DP)\[1\]通过分解成子问题解决了给定复杂的问题,并存储子问题的结果,以避免再次计算相同的结

    相关 动态规划

    1. 首先,动态规划不是一个特定的算法,它代表的是一种思想,一种手段 2. 动态规划方法往往用于求解“最优化问题”,能用动态规划求解的问题的前提是问题具有“最优子结构性质”

    相关 动态规划

    首先是概念:动态规划就是将原问题划分为简单的几个小问题(有点类似与分治法?但是分治法中的各个小问题是相互独立的,彼此之间不会产生影响,但是动态规划中所得的值和前面相关,当前的解

    相关 动态规划

    > 给定两个字符串A和B,返回两个字符串的最长公共子序列的长度。例如,A=”1A2C3D4B56”,B=”B1D23CA45B6A”,”123456”或者”12C4B6”都是最

    相关 动态规划

    基本思想:     动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 区别:     与

    相关 动态规划

    等我有时间了,一定要把《算法导论》啃完,这本书的印刷质量实在太好了,就是烧脑子,滑稽。 适合应用动态规划求解的最优化问题应该具备两个要素: 最优子结构:一个问题的最优解包含

    相关 动态规划

     1.题目:最长递增子序列(Longest Increasing Subsequence) 问题描述: > 给定长度为N的数组A,计算A的最长单调递增的子序列(不一定连续)