zoukankan      html  css  js  c++  java
  • 从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之类的进行以下比较,然后就完成了所有工作 

  • 相关阅读:
    使用cookie来做身份认证
    讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute
    不要使用Resource Owner Password Credentials
    nginx部署dotnet core站点
    这可能是最low的发布dotnet core站点到centos7教程
    记一个常见的ms sql server中取第N条记录的方法
    MVC基本开发介绍 (1)列表展示
    WCF 入门(29)
    WCF 入门(25,26,27,28)
    使用 Visual Studio Code 搭建 C/C++ 开发和调试环境
  • 原文地址:https://www.cnblogs.com/MekakuCityActor/p/8094786.html
Copyright © 2011-2022 走看看