• 从dfs向动态规划过渡


    据说每一个dfs,都能用动态规划思想做出来.

    首先要明白dfs与动态规划的一些小要点

                 1)dfs重在通过使用递归来使用不同的选择,通过使用形参的改变实现不同情景的改变(形参既包括了代价,又包含了结果)

                 2)动态规划则重在使用递归的同时,再使用数组存储,从而使用不同的选择(这里通过形参的改变来改变代价,通过数组元素值的加减来改变结果)

    这里主要讲述动态规划

    首先看一下动态规划通常的使用格式

    1)首先需要一个dp[  ][  ]来存储每个环节的值(动态规划的灵魂)                                                        

    2)然后就是形参的设置上,会有代价参数与边界参数

      (参数上和普通递归基本一致,只不过没有结果参数,所谓代价参数,如下就是 l 和 r 由下面的dp[ l ][ r ] = max(........)递归中的改变可知,边界参数 i 用来结束)

    3)之所以没有结果参数,是因为数组存储在一定程度上减少了对递归的依赖,

      数组通过使用      dfs( .. ....)  +  代价带来的后果     代替了    结果参数,如dp[ l ][ r ] = max(dfs(.....)   +  b[ i ]  * a[ l ] ,dfs(....))

    4)关于分支 , 一般会出现多个 if 之类的语句,分清楚什么情况下进行递归,什么情况下结束,什么情况下直接可以返回值

    5)关于返回值,每个分支都要有返回值,都和 dp [ ][ ] 有关,要么是直接返回,要么是为它赋值

    6)一般这种需要遍历全部的dfs都是求最值,所以需要在给dp [ ] [ ] 赋值时,将情况用max之类的进行以下比较,然后就完成了所有工作 

  • 相关阅读:
    数据结构、算法、及线性表总结
    第二次博客作业: 函数+进制转换器v1.0beta
    c语言文件
    Oracle中Left Outer Join和外关联(+)的区别
    Oracle中trunc函数、round 函数、ceil函数和floor 函数的使用
    Oracle 表之间的连接 JOIN
    Oracle TRUNCATE语法
    使用Content editor webpart 为NewForm增加默认值
    Metadata serviceTaxonomyHiddenList 权限
    SQL server总是不能远程连接
  • 原文地址:https://www.cnblogs.com/MekakuCityActor/p/8094786.html
Copyright © 2020-2023  润新知