据说每一个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之类的进行以下比较,然后就完成了所有工作

从dfs向动态规划过渡的更多相关文章

  1. 从DFS到记忆化DFS到动态规划

    什么是动态规划? 动态规划(Dynamic Programming)是通过组合子问题的解来解决问题的.动态规划是用于求解包含重叠子问题的最优化问题的方法.其基本思想是,将原问题分解为相似的子问题.在求 ...

  2. 2018宁夏邀请赛G(DFS,动态规划【VECTOR<PAIR>】)

    //代码跑的很慢四秒会超时,结尾附两秒代码(标程) #include<bits/stdc++.h>using namespace std;typedef long long ll;cons ...

  3. LeetCode入门指南 之 动态规划思想

    推荐学习labuladong大佬的动态规划系列文章:先弄明白什么是动态规划即可,不必一次看完.接着尝试自己做,没有思路了再回过头看相应的文章. 动态规划一般可以由 递归 + 备忘录 一步步转换而来,不 ...

  4. POJ1351 Number of Locks(数学)

    截至写博客为止,貌似这是网上第一个采用数学公式来处理的. 网上的题解都是DFS或是动态规划,但感觉可以推公式直接用数学的方法处理,想了好久,终于推出公式. 题意:一个长度为n的由数字1,2,3,4 组 ...

  5. OI分类

    黑字:认识 红字:要学 未添加:要学 ├─模拟├─字符串│    ├─字符串基础│    ├─manacher│    ├─kmp│    ├─trie│    ├─ac自动机│    ├─后缀数组( ...

  6. 【LeetCode每天一题】Jump Game(跳跃游戏)

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  7. 百度AIG知识图谱部算法实习生面经(已拿offer)

    一面: 1.自我介绍 2.平时用什么编程语言比较多 python,另外学过C语言和JAVA 3.c语言里指针占多少内存 答成8位了,应该根据机器而言是16位或32位 4.python里的map函数,讲 ...

  8. 洛谷 P2986 [USACO10MAR]伟大的奶牛聚集Great Cow Gat…(树规)

    题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...

  9. 给广大码农分享福利:一个业界良心的github仓库,中文计算机资料

    我今天查资料时无意发现的,https://github.com/CyC2018/CS-Notes 这个仓库包含了下列几个维度的计算机学习资料: 深受国内程序员喜爱,已经有超过3万多star了. 1. ...

随机推荐

  1. spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获

    spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获 当你的某个控制器内的某个方法报错,基本上回显示出java错误代码,非常不友好,这 ...

  2. 使用Laravel提交POST请求出现The page has expired due to inactivity错误

    任何指向 web 中 POST, PUT 或 DELETE 路由的 HTML 表单请求都应该包含一个 CSRF 令牌(CSRF token),否则,这个请求将会被拒绝.

  3. 『OpenCV3』处理视频&摄像头

    在opencv中,摄像头和视频文件并没有很大不同,都是一个可以read的数据源,使用cv2.VideoCapture(path).read()可以获取(flag,当前帧),对于每一帧,使用图片处理函数 ...

  4. BST(二叉排序树)的插入与删除

    值得一说的是删除操作,删除操作我们分为三种情况: 1.要删的节点有两个孩子: 找到左子树中的最大值或者右子树中的最小值所对应的节点,记为node,并把node的值赋给要删除的节点del,然后删除nod ...

  5. memory prefix twi,tri,trans ,tetra out 4

    1● twi 二   2● tri 三   3● trans 超过,超载   4● tetra 立体  

  6. 导出cnblogs文章

    导出cnblogs文章 网址  http://download.csdn.net/download/zlj1817/9001869 下载

  7. download fomat install rootfs script

    download.sh #!/bin/sh # check the network first serverip=$(cat /tmp/serverip) while true; do ping -c ...

  8. System.Web.Caching

    System.Web.Caching简单封装类: using System; using System.Collections.Generic; using System.Web.Caching; u ...

  9. hdu 1003 Max Sum (动态规划)

    转载于acm之家http://www.acmerblog.com/hdu-1003-Max-Sum-1258.html Max Sum Time Limit: 2000/1000 MS (Java/O ...

  10. java 缓冲区大小与下载速度的关系

    1.对于缓冲区空间的设定,要根据具体情况来定,如果存在大量的长信息(比如文件传输),将缓冲区定义的大些,可能更好的利用网络资源,如果更多的是短信息(比如聊天消息),使用小的缓冲区可能更好些,这样刷新的 ...