
DP
没想好M
这个作者很懒,什么都没留下…
展开
-
剑指 Offer II 091. 粉刷房子
动态规划 - 粉刷房子原创 2022-12-28 17:04:35 · 234 阅读 · 0 评论 -
剑指 Offer II 096. 字符串交织
动态规划剑指Offer II 096.字符串交织原创 2022-12-19 12:04:51 · 165 阅读 · 0 评论 -
树形DP 树的最长路径、树的中心
1072. 树的最长路径1、树的最长路径:树的最长路径又叫树的直径,即这棵树中距离最远的两个结点的距离。2、找树的直径的做法:①任取1点作为起点,找到距离该点最远的一个点u。②再找到距离点u最远的点v。③u和v之间的路径就是树的一个直径。思路:对每个结点,把它能往下走的所有路径枚举一遍,记下最长路径d1和次长路径d2,所以经过这个点的总最长路径长度为=d1+d2。#include<iostream>#include<cstring>using namespac原创 2022-05-03 11:30:55 · 497 阅读 · 0 评论 -
树形DP+状态机模型
AcWing 285. 没有上司的舞会题意:思路:f[i][0]:表示从以i为根节点的子树中选且不选择i的方案。f[i][1]:表示从以i为根节点的子树中选且包括i的方案。f[i][0]=Σmax(f[j][0],f[j][1]),f[i][1]=Σf[j][0];(j是i的字节点)。#include<iostream>#include<cstring>#include<algorithm>using namespace std;const...原创 2022-05-03 11:30:28 · 1043 阅读 · 0 评论 -
区间DP问题 记录方案
AcWing 479. 加分二叉树题意:思路:对于每棵子树,只要确定了根节点,那么这棵树的值也就确定了。于是,可以来枚举每个区间里根结点的情况来划分出它的左右子树。而每棵子树之间又是相互独立的,于是就想到了区间DP。f[L][R]表示所有中序遍历[L,R]这一段的二叉树的所有方案。假设根节点是k,于是f[L][R]=f[L][K-1]*F[K+1][R]+w[K]]。怎么记录方案数呢?g[L][R]来记录[L,R]这一段的根节点,一旦根节点确定了,就可以知道它的左右子树了,就可以递归下去原创 2022-04-26 19:27:48 · 1086 阅读 · 0 评论 -
区间DP问题
AcWing 1068. 环形石子合并题意:有一排石子,每次将相邻的两堆石子合并,首尾也视作相邻的,求最大和最小的合并价值。思路:将环形的转换为一条水平的链,就是把原来的值复制一份连接到后面就变成了长度为2n的一维数组,然后按“石子合并”来就行了。最后在计算答案的时候枚举右端点,找出长度为n的区间的最大和最小值就可。#include<iostream>#include<cstring>using namespace std;const int N=410,INF=0原创 2022-04-26 19:23:53 · 98 阅读 · 0 评论 -
区间DP 多维
AcWing 321. 棋盘分割题意:思路:状态表示,f(x1,y1,x2,y2,k)将矩形(x1,y1)(x2,y2)划分成k部分的所有方案。考虑横切、竖切?切完之后,要取那一部分继续进行切割?横切:竖切:#include<iostream>#include<cmath>#include<cstring>using namespace std;const int N=16,M=9,INF=0x3f3f3f3f;doub...原创 2022-04-26 19:22:48 · 94 阅读 · 0 评论 -
DP状态压缩
291. 蒙德里安的梦想题意:思路:核心:先横着放,再竖着放。(所以只需要考虑横着放的方案就可,因为横着的确定了,竖着的也就确定了)。[i][j]表示从第i-1列伸出到第i列状态为j的方案。#include<iostream>#include<vector>#include<cstring>using namespace std;typedef long long ll;const int N=15,M=1<<N;ll f[N][.原创 2022-03-08 17:24:29 · 95 阅读 · 0 评论 -
计数DP
AcWing 900. 整数划分题意:一个正整数 n 可以表示成若干个正整数之和,形如:n=n1+n2+…+nk,其中 n1≥n2≥…≥nk,k≥1。有多少种表示方法。思路:当成完全背包问题来想,假设有容量为1~n的n个物品,要使背包容量恰好为n,有多少种装法?dp[i][j]表示从1~i中选总和等于j的方案数。dp[i][j]=dp[i-1][j]+dp[i][j-i]。dp[i][j]=dp[i-1][j]+dp[i-1][j-i]+dp[i-1][j-2i]+...+dp[i-1][j-ki]原创 2022-03-04 09:30:41 · 280 阅读 · 0 评论