据说每一个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. 网站链接facebook 拿新的post

    $http({ method: "GET", url: "https://graph.facebook.com/oauth/access_token?client_id= ...

  2. C++数组引用

    C++数组引用 一.数组引用 C++数组的引用:引用即别名这样比指针传地址方便多了 形参中的(&a)[10]可以就看做a数组的别名,肯定要指定数组大小,如果没有后面的数组大小,天知道是变量还是 ...

  3. LeetCode--110--平衡二叉树

    问题描述: 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1. 示例 1: 给定二叉树 [3,9,20,n ...

  4. CentOS查看分区的方式

    看ls /dev然后挂载 df -T  只可以查看已经挂载的分区和文件系统类型 fdisk -l 可以显示出所有挂载和未挂载的分区,但不显示文件系统类型 parted -l 可以查看未挂载的文件系统类 ...

  5. hdu2059 dpdpdp玄学5555~~

    龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. FREETEXTBOX

    本文转自http://blog.csdn.net/JOHNCOOLS/archive/2006/04/08/655553.aspx感谢作者们的付出---------------版本: FreeText ...

  7. EBS OAF开发中的错误/异常处理(ErrorHandling) (转)

    原文地址 EBS OAF开发中的错误/异常处理(ErrorHandling) EBS OAF开发中的错误/异常处理(ErrorHandling) (版权声明,本人原创或者翻译的文章如需转载,如转载用于 ...

  8. ES profile 性能优化用——返回各个shard的耗时

    Profile API 都说要致富先修路,要调优当然需要先监控啦,elasticsearch在很多层面都提供了stats方便你来监控调优,但是还不够,其实很多情况下查询速度慢很大一部分原因是糟糕的查询 ...

  9. 蓝桥杯—ALGO-12 幂方分解(递归递推)

    问题描述 任何一个正整数都可以用2的幂次方表示.例如: 137=27+23+20 同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) 进一步 ...

  10. cas 服务端认证流程

    CAS服务端流程分析 'CAS单点登录服务器端的登录流程' -----流程的配置在/WEB-INF/login-webflow.xml文件中 <var name="credential ...