动态规划
文章平均质量分 58
《算法笔记》动态规划部分
yc_cy1999
一只喜欢cc和想去南大的小羊
展开
-
LeetCode 第 224 场周赛 5655. Largest Submatrix With Rearrangements【动态规划】⭐⭐⭐⭐⭐
文章目录题目描述知识点我的实现码前思考代码实现时空复杂度分析码后反思参考文档题目描述知识点动态规划我的实现码前思考这道题目的motivation跟LeetCode 85非常像,是它的一个简化版。在LeetCode 85中,我们利用分解问题的方法,提出最大子矩阵一定是以某一行为底的思想对问题进行分解(这是代码的第一层循环)。在LeetCode 85中,我们需要使用到单调栈,但是在这道题目中,由于列是可以移动的,所以我们直接“贪心”地对高度进行排序,这样就能够保证充分利用列可移动的条件得到.原创 2021-01-19 09:16:58 · 384 阅读 · 0 评论 -
LeetCode 121. Best Time to Buy and Sell Stock【股票问题最简单版本】
文章目录题目描述知识点我的实现码前思考代码实现码后反思题目描述知识点数组遍历我的实现码前思考由于时间的问题,所以是记录之前最低价,然后以当前天作为售出天进行解题。代码实现//只需要记录前面的最低价就好了//时间复杂度为O(n)class Solution {public: int maxProfit(vector<int>& prices) { if(prices.size()==0){ return 0; .原创 2020-09-07 15:40:41 · 98 阅读 · 0 评论 -
LeetCode 32. Longest Valid Parentheses【动态规划+栈+括号匹配】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思参考文档题目描述知识点栈、字符串匹配结果实现码前思考看见子串匹配问题,我想到的是滑动窗口,但是很遗憾,我没有找到解决办法;再然后看见最长,我想的是动态规划,毕竟是最优化问题嘛,但是也没有想清楚;最后,我偷偷看了一下提示,才发现栈,原来之前也是做过括号匹配的题目的,用的就是栈,于是我就想怎么用栈来解决这个问题。思路是...原创 2020-04-25 15:03:21 · 199 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【区间DP】LeetCode 730. Count Different Palindromic Subsequences
文章目录题目描述知识点思路解析代码实现码后反思参考源码配合视频题目描述知识点思路解析首先要理解下面这张PPT的含义(这种情况还是非常见的):综上,首尾相同有三种情况,首位不同只有一种情况。这种overlapping的情况,跟我们在讲括号匹配时有点相似。代码实现class Solution {public: int countPalindromicSubsequences(string S) { long long mod = 1000000007; .原创 2020-08-10 22:32:27 · 113 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【区间DP】LeetCode 1039. Minimum Score Triangulation of Polygon
文章目录题意题解代码结果反思参考题解题意题解一个凸 nnn 边多边形,不停切割下去,最终一定是能切割成 n−2n-2n−2 个三角形。那么按照什么顺序切割才能方便求解呢?可以发现,一刀下去,两个多边形只有一条边是在内部,其他边都是连续的外围的边,如下图所示:所以右边的多边形我们可以用 (i,j)(i,j)(i,j) 二维状态来表示。那么继续切割下去,例如切割右边那块多边形,我们应该先把 (i,j)(i,j)(i,j) 这条边对应的三角形给找出来,那就是在 (i,j)(i,j)(i,j).原创 2020-08-08 20:16:18 · 223 阅读 · 0 评论 -
区间DP
文章目录讲述例题1:矩阵最优连乘例题2:括号匹配(子序列)⭐⭐⭐⭐⭐例题3:石子合并例题4:环形石子合并模板总结题型训练参考资料讲述区间动态规划,顾名思义,就是在区间上进行动态规划。通常情况下,这类问题在进行一次决策后,决策区间会由一个大区间分成两个小区间,问题也由一个规模较大问题分解成两个规模较小的问题。这里的一次决策,相当于将一个大的集合划分成两个小的集合。这样,就可以从长度较小的区间向长度较长的区间进行递推。例题1:矩阵最优连乘解答:个人感觉和【石子合.原创 2020-08-08 16:50:13 · 218 阅读 · 0 评论 -
【区间DP】石子合并
文章目录一、简单石子合并1. 题目描述2. 分析2.1 状态表示——化零为整2.1.1 集合2.1.2 属性2.2 状态计算——化整为零3. 代码实现二、环形石子合并一、简单石子合并1. 题目描述2. 分析2.1 状态表示——化零为整问题要求的是所有合并方式里面体力最小的方案。所有的合并方式一共是 (n−1)!(n-1)!(n−1)! 种方案。2.1.1 集合所有满足条件一,条件二的元素的集合。所谓的条件一,条件二是DP数组的两个维度。因此,f(i,j)表示所有将[i,j]合并为一堆的方.原创 2020-08-08 15:05:00 · 385 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【区间DP】LeetCode 664. Strange Printer
文章目录题目描述知识点我的实现结果码前思考代码实现码后反思题目描述虽然是打字,其实理解成染色问题会更好一些。知识点动态规划之区间DP我的实现结果码前思考这道题目我不会,我是看了大雪莱的视频,结果还是不怎么会。但是他的基本思路是下面这样子的:‘定义dp[L][R]为将区间[L, R]打印好的所需最小次数,那么对于区间[L, R]来说第一次打印的区间可以是[L, L],[L, L+1],…,[L, L+K],…,[L, R]。注意每一次打印的是同一个字符,所以第一次打印区间[L, L+.原创 2020-08-08 15:03:41 · 108 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【高楼扔鸡蛋】LeetCode 887. Super Egg Drop
文章目录一、解析题目二、思路分析三、疑难解答今天要聊一个很经典的算法问题,若干层楼,若干个鸡蛋,让你算出最少的尝试次数,找到鸡蛋恰好摔不碎的那层楼。国内大厂以及谷歌脸书面试都经常考察这道题,只不过他们觉得扔鸡蛋太浪费,改成扔杯子,扔破碗什么的。具体的问题等会再说,但是这道题的解法技巧很多,光动态规划就好几种效率不同的思路,最后还有一种极其高效数学解法。秉承咱们号一贯的作风,拒绝奇技淫巧,拒绝过于诡异的技巧,因为这些技巧无法举一反三,学了不太划算。具体的问题等会再说,但是这道题的解法技巧很多,光动态.转载 2020-08-07 19:53:38 · 228 阅读 · 0 评论 -
状态压缩:对动态规划进行降维打击
文章目录我们号之前写过十几篇动态规划文章,可以说动态规划技巧对于算法效率的提升非常可观,一般来说都能把指数级和阶乘级时间复杂度的算法优化成 O(N^2),堪称算法界的二向箔,把各路魑魅魍魉统统打成二次元。但是,动态规划本身也是可以进行阶段性优化的,比如说我们常听说的「状态压缩」技巧,就能够把很多动态规划解法的空间复杂度进一步降低,由 O(N^2) 降低到 O(N),能够使用状态压缩技巧的动态规划都是二维 dp 问题,你看它的状态转移方程,如果计算状态 dp[i][j] 需要的都是 dp[i][j].转载 2020-08-07 17:07:16 · 303 阅读 · 0 评论 -
动态规划和回溯算法到底谁是谁爹?
文章目录回溯思路二、消除重叠子问题三、动态规划读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目:⭐⭐⭐⭐⭐【0-1背包变形+恰好装满+可行解】LeetCode 494. Target Sum我们前文经常说回溯算法和递归算法有点类似,有的问题如果实在想不出状态转移方程,尝试用回溯算法暴力解决也是一个聪明的策略,总比写不出来解法强。在机试的时候,如果实在想不出动态规划的状态转移方程怎么写,可以尝试使用暴力的DFS骗一些分呢~那么,回溯算法和动态规划到底是啥关系?它俩都.转载 2020-08-07 16:46:19 · 1487 阅读 · 0 评论 -
LeetCode 312. Burst Balloons【区间DP】⭐⭐⭐⭐⭐
文章目录题目描述知识点我的实现结果码前思考代码实现码后反思题目描述知识点动态规划之区间DP我的实现结果码前思考我没有做出来,我是看某位大神的题解才知道是区间DP的。既然是区间DP那么就是基本套路了:枚举区间的长度;枚举区间的起点和中点;利用已有信息在区间内做文章。(具体做法因题目的不同情况而异,常见的就是对区间进行分割,划分为两个部分,得到子问题,与石子合并问题类似)代码实现//一道不那么明显的区间DP问题,区间DP清华好像挺喜欢考的class Solution {.原创 2020-08-03 21:13:54 · 129 阅读 · 0 评论 -
LeetCode 309. Best Time to Buy and Sell Stock with Cooldown【动态规划+股票系列】⭐⭐⭐⭐⭐
文章目录题目描述知识点我的实现结果码前思考代码实现码后反思网友超赞题解DP 状态的选择状态转移base case代码题目描述这道题目需要理解清楚。知识点动态规划的股票系列我的实现结果码前思考这道题目我想了挺久的,我是用类似于背包的思想去解题的。定义一个二维数组dp[][],dp[i][j]表示在前i件物品的前提下,若【最后一步有效操作】是j操作,能获得的最大收益。 这里的【有效操作】就是跳过了那些在某天不买卖股票的情况。为什么会想到这么抽象的一个定义呢?假设现在是第i天,那.原创 2020-08-02 18:05:30 · 116 阅读 · 0 评论 -
LeetCode 338. Counting Bits【位运算+动态规划】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思动态规划解题思路代码结果反思题目描述知识点位运算、动态规划结果实现码前思考并不会O(N)O(N)O(N)的算法,只会暴力,后面讲怎么O(N)O(N)O(N);代码实现//实在想不到O(N)的解法class Solution {public: vector<int> countBits(int num) { vector<int> ans; for(int i.原创 2020-08-01 22:51:43 · 100 阅读 · 0 评论 -
LeetCode 416. Partition Equal Subset Sum【01背包变式+是否有解】⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点动态规划结果实现码前思考想了好久才发现这是一个01背包问题,果然换了一件衣服我就不知道是啥了。。。以后看见那种暴力是O(2n)O(2^n)O(2n)的算法,首先要想到的就是用背包去优化。。。使用“动态规划”解决问题的思路是“以空间换时间”,“规划”这个词在英文中就是“填表格”的意思,代码执行的过程,也可以称之为“填表格”。知道是背包问题之后,其他的都是套路了。。。代码实现//使用0-1背包进行求解,dp[.原创 2020-08-01 21:33:22 · 99 阅读 · 0 评论 -
LeetCode 494. Target Sum【0-1背包变形+恰好装满+可行解】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点动态规划结果实现码前思考我这道题目没有想出来,直接看的题解,实在是想不出。原来这道题目就是0-1背包,通过 dp数组保存前n个物品的所有可能和的方案数 ,从而避免了重复计算。避免了暴力的O(2n)O(2^n)O(2n);(我有想到暴力O(2n)O(2^n)O(2n),但是不知道怎么优化它,现在想来,当初0-1背包问题的提出也是为了优化O(2n)O(2^n)O(2n)啊!!!)代码实现//这居然是一个0-1背.原创 2020-08-01 17:59:02 · 333 阅读 · 0 评论 -
LeetCode 647. Palindromic Substrings【回文子串模板题】
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点动态规划结果实现码前思考模板题,先枚举长度,再枚举起点;dp[i][j]表示i~j是否为回文子串。代码实现//由于字符串的长度不超过1000,那么可以使用动态规划O(n^2)来求解,当然暴力好像也行?class Solution {public: int countSubstrings(string s) { int len = s.size(); if(len =.原创 2020-08-01 14:57:12 · 112 阅读 · 0 评论 -
LeetCode 322. Coin Change【爬楼梯问题变形】⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点动态规划结果实现码前思考采用自下而上的方式进行递推。跟爬楼梯问题一毛一样。代码实现//采用递推的方式进行,其实也可以使用递归,但是感觉差不多吧,反正是分解子问题。递推时间复杂度应该要高些//对于最优化问题,我们应该要想到dp才对class Solution {public: int coinChange(vector<int>& coins, int amount) { .原创 2020-07-27 17:16:14 · 266 阅读 · 0 评论 -
LeetCode 300. Longest Increasing Subsequence【LIS模板题】
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点动态规划结果实现码前思考模板题,后面尝试一下O(NlogN)O(NlogN)O(NlogN)的写法代码实现//典型地LIS模板题class Solution {public: int lengthOfLIS(vector<int>& nums) { int len = nums.size(); vector<int> dp(len,1).原创 2020-07-27 16:47:46 · 72 阅读 · 0 评论 -
LeetCode 72. Edit Distance【编辑距离+字符串动态规划+二维数组】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点编辑距离、字符串动态规划、二维数组结果实现码前思考这道题目是典型地从暴力解法里面提炼动态规划思想的问题。与背包问题有着异曲同工之妙~~都使用了二维的数组,都是递推实现的;关于这道题目的详细的解题方案可以参见动态规划:编辑距离(Edit Distance)代码实现//使用动态规划进行解题//使用二维数组进行求解动态规划问题class Solution {public: vector<vect.原创 2020-07-23 16:53:12 · 227 阅读 · 0 评论 -
动态规划:编辑距离(Edit Distance)⭐⭐⭐⭐⭐
文章目录零、引言一、思路二、代码详解三、动态规划优化三、扩展延伸文章转载自下面这位老哥的公众号,嘻嘻,快去关注他,真的是宝藏!!!零、引言前几天在网上看到一份鹅场的面试题,算法部分大半是动态规划,最后一题就是写一个计算编辑距离的函数,今天就专门写一篇文章来探讨一下这个经典问题。我个人很喜欢编辑距离这个问题,因为它看起来十分困难,解法却出奇得简单漂亮,而且它是少有的比较实用的算法(是的,我承认很多算法问题都不太实用)。下面先来看下题目:为什么说这个问题难呢,因为显而易见,它就是难,让人手足无.转载 2020-07-23 16:25:43 · 432 阅读 · 0 评论 -
HDOJ 4109. Instructions Arrangement【关键路径+拓扑排序+动态规划+记忆化搜索】⭐⭐⭐⭐⭐
文章目录题目描述代码实现码后反思题目描述代码实现//使用动态规划解题,同时需要记录开始和结束时间//数组下标是从0开始的 #include <cstdio>#include <vector>#include <queue>#include <algorithm>using namespace std;const int maxn = 1010;const int inf = 0x3fffffff;int n;int m;str.原创 2020-06-28 17:46:55 · 364 阅读 · 0 评论 -
POJ 1014 Dividing【多重背包之可行解型】⭐⭐⭐⭐⭐
文章目录题目描述实现码前思考代码实现码后反思题目描述实现码前思考非典型性多重背包代码实现//比较隐蔽的多重背包问题,求得不是最值,而是可行性 #include <cstdio>#include <algorithm>using namespace std;const int maxc = 120010;const int maxn = 120010;int v[maxn];bool dp[maxc];int input[10];int ma.原创 2020-06-25 19:46:33 · 202 阅读 · 0 评论 -
LeetCode 518. Coin Change 2【完全背包+不是爬楼梯问题!】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点动态规划之完全背包结果实现码前思考使用的是完全背包代码实现//带输出解决方案数量的充满完全背包问题class Solution {public: static const int maxa = 5010; static const int maxn = 510; int dp[maxa]; int change(int amount, vector<int>&a.原创 2020-06-25 15:59:40 · 296 阅读 · 0 评论 -
最小邮票数【0-1背包之必须充满背包】
文章目录题目链接代码实现码后反思题目链接代码实现//这是一类装满背包的问题~ #include <cstdio>#include <algorithm>using namespace std;const int maxm = 110;const int maxn = 30;int n;int m;int w[maxn];int dp[maxm];int main(){ while(scanf("%d",&m)!=EOF){ scanf(.原创 2020-06-25 15:10:12 · 179 阅读 · 0 评论 -
点菜问题【0-1背包基础入门题】
文章目录题目链接代码实现码后反思题目链接代码实现#include <cstdio>#include <algorithm>using namespace std; const int maxc = 1010;const int maxn = 110;int c;int n;int v[maxn];int w[maxn];int dp[maxc]; int main(){ while(scanf("%d ",&c)!=EOF){ scan.原创 2020-06-25 14:46:22 · 283 阅读 · 0 评论 -
LeetCode 221. Maximal Square⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点动态规划结果实现码前思考代码实现//有点意思的dpclass Solution {public: int maximalSquare(vector<vector<char>>& matrix) { //首先分别记录每个结点上面和左边邻接的1的数量 int height = matrix.size(); if(height==0).原创 2020-06-21 19:32:12 · 105 阅读 · 0 评论 -
LeetCode 198. House Robber【集合划分观点+序列型DP+背包的一点点思想】⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点动态规划,序列型哒~~结果实现码前思考这个题有点点水。。。代码实现class Solution {public: int rob(vector<int>& nums) { int sz = nums.size(); if(sz==0){ return 0; }else if(sz==1){ .原创 2020-06-21 17:48:39 · 113 阅读 · 0 评论 -
LeetCode 152. Maximum Product Subarray【乘积最大子数组】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点动态规划结果实现码前思考这个题目最大的陷阱就是很容易掉到和最大子数组和的陷阱里面。我们考虑[-2,1,-2]这种情况就应该知道这并不简简单单是最大子数组和那么简单的事情了;这里还是使用到了最大子数组和中,i位置的情况是由i-1号位置所决定的这种最优子结构问题,但是在这里,由于在计算i-1时,是不可以去看i及其后面的数字的符号的,所以我们需要存储两个值,i-1位置的最大正数乘积maxPos和最小负数乘积minNeg,.原创 2020-06-21 17:15:34 · 165 阅读 · 0 评论 -
LeetCode 139. Word Break【KMP+动态规划】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述给定一个单词和一个词典,看这个单词能不能由词典里面的单词构成。知识点动态规划?我用的是 KMP+dp数组 的方式结果实现码前思考确实没有想到怎么用纯动规来解答这个题目。。。所以就动起了KMP的歪脑筋首先,需要明确的是,如果能够被拆分,那么肯定是由s中匹配的word构成的,所以,我们不妨先找出s中所有匹配的word,然后记录这些word在s的起点和终点;得到s中所有的匹配的word的起点和终点之后,将他们按照起点进行从小.原创 2020-06-21 16:17:11 · 192 阅读 · 2 评论 -
LeetCode 96. Unique Binary Search Trees【集合划分观点看待DP问题】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点动态规划结果实现码前思考典型地划分情况的dp题,不慌;分别枚举[1,...,n]为根结点的情况,就能发现解决方法了主要还是动手暴力枚举一下,发现规律,算法很多题,看是没有用的,动手演算一下撒~~~代码实现//典型地划分情况的dp题,不慌class Solution {public: int numTrees(int n) { vector<int> dp(n+10,0.原创 2020-06-21 14:51:58 · 149 阅读 · 0 评论 -
LeetCode 42. Trapping Rain Water【接雨水+左右遍历动态规划】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点思维+动态规划结果实现码前思考之前我使用了一种错误的思想去思考这个问题。。。后来看了LeetCode官方题解才发现,原来一个点的积水量,就是取决于它左边最高高度和右边最高高度的最小值。。。这样的话,就很好写代码了。代码实现//动态规划,类似于合唱队形,只不过是凹陷的,求面积class Solution {public: int trap(vector<int>& height.原创 2020-06-19 19:22:26 · 144 阅读 · 0 评论 -
LeetCode 279. Perfect Squares【动态规划 / BFS的层数求最小次数】⭐⭐⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思题目描述知识点BFS/动态规划结果实现码前思考这是在一个微信公众号上看见的题目,对于求最小次数的问题,BFS由于具有与生俱来的层数,所以很容易在每层中进行判断,当满足条件时就是最小次数了!为了避免超时,一定要使用一个hash来存储已经处理过的数据,否则单纯的暴力一定会超时的代码实现//使用BFS进行求解,最小的数量就是首先减到0时的层数!//可以设置一个小小的剪枝,设置一个vis数组class Solution {p.原创 2020-06-19 16:35:58 · 155 阅读 · 0 评论 -
EOJ 3297. 铺瓷砖【斐波拉契数列的变式+记忆化搜索/DP】⭐⭐⭐⭐⭐
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述铺瓷砖单点时限: 2.0 sec 内存限制: 256 MB章鱼王的行宫要铺瓷砖了。 行宫中有一长度为 的地板,给定三种不同瓷砖:一种长度为1,一种长度为2,另一种长度为3,数目不限。要将这个长度为 的地板铺满,并且要求任意两个相邻的瓷砖长度均不等,一共有多少种不同的铺法?在所有的铺设方法中,一共用了长度为1的瓷砖多少块? 例如,长度为4的地面一共有如下3种铺法,并且,一共用了长度为1的瓷砖4块: 4=1+2+1.原创 2020-05-20 16:25:02 · 399 阅读 · 0 评论 -
闫式DP分析法
学好DP的一个关键点在于刷遍所有类型的DP题目选择DP问题:背包模型序列DP问题状态压缩问题状态机问题树形DP问题区间DP问题斜率优化问题文章目录1. 核心思想——集合2. 01背包问题2.1 集合2.2 属性2.3 状态计算1. 核心思想——集合闫式DP分析法的核心思想是从集合的角度来分析DP问题。所有的DP问题都可以使用闫式DP分析法进行分析。(经过70道题目验证通过????)我们可以把做过的所有DP问题都看作是有限集上的最值问题。DP问题 == 有限集上的最值原创 2020-05-13 22:24:28 · 2769 阅读 · 0 评论 -
DP之序列、子串问题
文章目录前言dp数组的维度需要注意的细节前言DP之序列、字串问题是非常常见的一种问题,它包括下面这些题型:最大连续子序列和最长不下降子序列(LIS)最大公共子序列最长回文子串这类问题的最大特点就是它的dp数组的索引i是依据序列或字符串的下标的。即根据序列seq[i]或者字符串s[i]来定义dp[i]的含义,例如LIS的 dp[i] 的定义就是 以当前seq[i]为末尾的最长不下降子序列。 这里的dp数组的定义非常能体现划零为整的思想。dp数组的维度在上面四类典型问题中:最大连续.原创 2020-05-13 19:08:21 · 295 阅读 · 0 评论 -
Sum【最大连续子序列和】⭐⭐⭐⭐⭐
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点动态规划之最大连续子序列和实现码前思考这道题目我写的时候没有发现可以使用最大连续子序列和去做(我好菜,我好笨????),所以我的思路是这样的:代码实现#include <cstdio>#include <algorithm>using namespace std;//共享数据结构记得初始化//数组下标从0开始 //是否会超界 const int maxn = 1e5+10; int原创 2020-05-13 18:46:37 · 326 阅读 · 0 评论 -
树形DP
写在前面:之前看大雪莱的DP课,他说DP里面呢,其实也是套路,不同的DP问题见多了,你就差不多也就会这一类了。带着大神的思想。我开始按照专题去刷DP问题,这次刷的是树形DP。文章目录概述题型训练概述树形DP。这是个什么东西?为什么叫这个名字?跟其他DP有什么区别?相信很多初学者在刚刚接触一种新思想的时候都会有这种问题。没错,树形DP准确的说是一种DP的思想,将DP建立在树状结构的...原创 2020-05-02 22:21:59 · 127 阅读 · 0 评论 -
LeetCode 337. House Robber III【树形DP模板题+集合划分的观点】⭐⭐⭐
文章目录题目描述知识点结果实现码前思考代码实现码后反思参考文档题目描述知识点树形DP结果实现码前思考对于树形DP的问题,其实说白了,我认为树形DP问题就是在树结构上,求解最优化问题。有了上面的理解,树形DP问题的解题套路就是以当前子树根结点,结合当前子树根结点的左子树和当前子树根结点的右子树进行分情况讨论。在分情况讨论中,我们其实就已经解决了动态规划中的最优子结构和重叠...原创 2020-05-02 22:02:48 · 122 阅读 · 0 评论 -
LeetCode 543. Diameter of Binary Tree【树形DP模板题】
文章目录题目描述结果知识点实现码前思考代码实现码后反思题目描述结果知识点树形DP实现码前思考由于之前做过了⭐LeetCode 124. Binary Tree Maximum Path Sum,这道题的思想和它是一样的,所以就没多想了。代码实现//我记得我之前做过一道“剥洋葱的题”//到时候回去看看//这道题就是典型的DFS题/** * Definition ...原创 2020-05-02 20:30:10 · 149 阅读 · 0 评论