Dynamic Programming 实际上是[LeetCode] 系统刷题4_Binary Tree & Divide and Conquer的基础上,加上记忆化的过程。就是说,如果这个题目实际上是类似于Divide and conquer或者说是DFS,但是在计算过程中有很多重复计算同样的过程的话,那么就可以用Dynamic prgramming/记忆化搜索来完成。基本就是利用空间来简化时间复杂度的过程。

可以/很有可能使用Dynamic programming的条件,满足之一即可。

1. Maximum/Minimum

2. Yes/No. True/False

3. Count(*)

一定不是Dynamic programming的条件,满足之一即可。

1. all 具体方案。

2. input是集合或者跟position无关。

3. move 4 directions in 二维数组。(或者说不是固定方向,有可能会有循环)

动态规划4要点:

1. 状态 state

mem[i][j] 代表什么,ex. 代表s1前i个characters和s2前j个characters。

2. Function

mem[i][j] = mem[i - 1][j] if ****

3. Initialize

usually mem[0][0]  / mem[i][0]/ mem[0][j]

4. 答案

mem[n]/mem[n - 1]/mem[m][n]

在这里将Dynamic programming分为几类。

1. 矩阵Dynamic programming/Matrix DP

state: mem[i][j] 走到坐标(x, y) 的状态。

[LeetCode] 120. Triangle _Medium tag: Dynamic Programming

[LeetCode] 64. Minimum Path Sum_Medium tag: Dynamic Programming

[LeetCode] 62. Unique Paths_ Medium tag: Dynamic Programming

[LeetCode] 63. Unique Paths II_ Medium tag: Dynamic Programming

2. Sequence DP

state: mem[i] 前i个位置

mem 的length 设为n

[LeetCode] 70. Climbing Stairs_ Easy tag: Dynamic Programming

[LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming

[LeetCode] 45. Jump Game II_ Hard tag: Dynamic Programming

3. 分割DP

state: mem[i] 前i个character 是否可行

mem 的length 设为n + 1,因为要考虑到前0个character,也就是empty string。

[LeetCode] 132. Palindrome Partitioning II_ Hard tag: Dynamic Programming

[LeetCode] 139. Word Break_ Medium tag: Dynamic Programming

4. Two sequences DP

state: mem[i][j] 表明s1的前i个characters, 配上s2的前j 个characters。

mem 的length 设为(n + 1)* (m + 1),因为要考虑到前0个character,也就是empty string。

需要初始化 mem[i][0], mem[0][j]

[LintCode] 77. Longest common subsequences_ Medium tag: Dynamic Programming

[LeetCode] 72. Edit Distance_hard tag: Dynamic Programming

[LeetCode] 115. Distinct Subsequences_ Hard tag: Dynamic Programming

[LeetCode] 97. Interleaving String_ Hard tag: Dynamic Programming

[LeetCode] 系统刷题5_Dynamic Programming的更多相关文章

  1. [LeetCode] 系统刷题1_代码风格及边界

    代码风格 说自己不清楚的算法,比如KMP,如果解释不清楚或者写不出来的算法建议不提 注意代码的缩进以及空格的合理运用,使得代码看起来比较整洁有条理 注意边界的条件以及越界 误区: 算法想出来还仅仅不够 ...

  2. [LeetCode] 系统刷题4_Binary Tree & Divide and Conquer

    参考[LeetCode] questions conlusion_InOrder, PreOrder, PostOrder traversal 可以对binary tree进行遍历. 此处说明Divi ...

  3. [LeetCode] 系统刷题3_Binary search

    可以参考 [LeetCode] questions conclusion_ Binary Search

  4. [LeetCode] 系统刷题2_排列组合

    要用到backtracking,是否要跟backtracking放到一起总结? 适用范围: 几乎所有搜索问题 什么时候输出 哪些情况需要跳过 相关题目: [LeetCode] 78. Subsets ...

  5. [LeetCode] 系统刷题6_Linked List

    1. Dummy Node 2. Basic skills [LeetCode] 206. Reverse Linked List_Easy tag: Linked List 2. Fast slow ...

  6. LeetCode的刷题利器(伪装到老板都无法diss你没有工作)

    在工程效率大行其道的今天,如果不会写点代码以后也不容易在测试圈混下去.今天给大家推荐一个LeetCode的刷题利器,可以伪装到连你老板在这里走过去都无法确认你是在干活呢,还是在干活呢. LeetCod ...

  7. leetcode top-100-liked-questions刷题总结

    一.起因 宅在家中,不知该做点什么.没有很好的想法,自己一直想提升技能,语言基础自不必言,数据结构还算熟悉,算法能力一般.于是乎,就去刷一通题. 刷题平台有很多,我选择了在leetcode进行刷题.回 ...

  8. LeetCode 高效刷题路径

    LeetCode 高效刷题路径 Hot 100 https://leetcode.com/problemset/hot-100/ https://leetcode-cn.com/problemset/ ...

  9. leetcode 算法刷题(一)

    今天开始刷Leetcode上面的算法题.我会更新我刷题过程中提交的代码(成功和不成功的都有)和比较好的解法 第二题 Add Two Numbers 题目的意思:输入两个链表,这两个链表都是倒序的数字, ...

随机推荐

  1. windows下搭建docker

    1.下载,双击安装,然后一路next 2.启动,然后打开docker的settings 在shared drives里勾选你想要把项目存放的盘,点击Apply(这里在windows系统下有个坑,项目只 ...

  2. bytes和str的区别与转换

    bytes和str的区别 1.英文 b'alex'的表现形式与str没什么两样 2.中文 b'\xe4\xb8\xad'这是一个汉字在utf-8的bytes表现形式 3.中文 b'\xce\xd2'这 ...

  3. 洛谷P1135 奇怪的电梯【bfs】

    题目:https://www.luogu.org/problemnew/show/P1135 题意: 一共有n层楼,在第i层可以往上或往下$k_i$层. 问从$a$层到$b$层至少需要多少乘多少次电梯 ...

  4. .NET Core类库项目中如何读取appsettings.json中的配置

    这是一位朋友问我的问题,写篇随笔回答一下.有2种方法,一种叫丑陋的方法 —— IConfiguration ,一种叫优雅的方法 —— IOptions . 1)先看丑陋的方法 比如在 RedisCli ...

  5. You are using pip version 9.0.1, however version 18.0 is available. You should consider upgrading via the 'pip install --upgrade pip' command.

    实测使用pip3进行一些软件安装的时候,会弹出这个,记住不要理会,一旦你执行,就会升级pip,并冲突pip3造成pip3不能用,这时候就要重新安装一下python3

  6. Codeforces 1132C - Painting the Fence - [前缀和优化]

    题目链接:https://codeforces.com/contest/1132/problem/C 题意: 栅栏有 $n$ 个节,有 $q$ 个人可以雇佣来涂栅栏,第 $i$ 个人可以涂第 $l_i ...

  7. [No0000178]改善C#程序的建议1:非用ICloneable不可的理由

    好吧,我承认,这是一个反标题,实际的情况是:我找不到一个非用ICloneable不可的理由.事实上,接口ICloneable还会带来误解,因为它只有一个Clone方法. 我们都知道,对象的拷贝分为:浅 ...

  8. [No0000145]深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing)理解堆与栈2/4

    前言   虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC).另外,了解内存管理可以帮助我们理解在每一个程 ...

  9. [No0000100]正则表达式匹配解析过程分析(正则表达式匹配原理)&regexbuddy使用&正则优化

    常见正则表达式引擎引擎决定了正则表达式匹配方法及内部搜索过程,了解它至关重要的.目前主要流行引擎有:DFA,NFA两种引擎. 引擎 区别点 DFA Deterministic finite autom ...

  10. Vue 超快速学习

    Vue 超快速学习 基础知识: 1.vue的生命周期: beforeCreate/created. beforeMount/mounted. beforeUpdate/updated. beforeD ...