动态规划
文章平均质量分 85
串C
这个作者很懒,什么都没留下…
展开
-
区间dp模版
区间dp题目1: 环形石子合并分析:时间复杂度: O(n3)O(n^3)O(n3), 1秒之内可以出解代码区:#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 310;int n;int w[N];int s[N];int f[N][N];int main(){ cin >> n;原创 2022-05-17 23:09:42 · 214 阅读 · 0 评论 -
常见的树形dp
树形dp一般通过递归来完成这类问题,通过递归算出小的子树, 一般是用树的后续遍历。一般而言有两类:f[u][0/ 1], 以u为根, u这个节点选还是不选f[u][v], 有依赖的背包问题, 枚举体积有两种方式,按体积为1为增量开始递增。或者使用二进制的方式来枚举体积。这两种方法的时间复杂度不同。具体问题具体分析,保证不能超时。题目1:没有上司的舞会分析:时间复杂度: O(n)O(n)O(n), 量级1e3, 1秒之内可以出解代码区:#include<iostream>#原创 2022-05-17 23:09:00 · 105 阅读 · 0 评论 -
状态机模型
状态机dp对dp问题认识:其实dp问题是在一个有向无环图上递推的过程, 在dag上递推求得答案。 图论问题我们需要建图, 但是dp问题我们不需要真的把图建出来,其实 状态表示,f(i, j)表示的是图中的一个节点, f(i, j)存的值是从起点到该点的值(最大值、最小值、方案数)。状态转移方程其实描述的就是当前点可以由前面已经求得的哪些点转移过来,实际上就是描述的是当前点可以由前面的哪些点到达, 用状态转移方程递推求得答案。为什要引入状态机:在背包问题中, 前面一个物品的选择是不会影响后一个物品,原创 2022-05-14 20:48:22 · 385 阅读 · 0 评论 -
背包特训集
背包集训题目1: 采药分析:01背包裸题, 直接写时间复杂度: O(n∗m)O(n * m)O(n∗m) 量级:1e5, 1秒之内可以出解代码区:#include<iostream>#include<cstring>using namespace std;const int N = 1010;int n, m;int f[N];int main(){ cin >> m >> n; for(int原创 2022-05-13 20:12:06 · 97 阅读 · 0 评论 -
最长上升子序列模型
模型4:最长上升子序列模型题目1: 怪盗基德的滑翔翼分析:原创 2022-05-11 16:32:27 · 236 阅读 · 0 评论 -
背包模型
第二个模型:背包模型背包问题的种类:01背包:每个物品的个数只有一个, 每个物品最多可以选1个完全背包: 每个物品的个数有无限个, 不超过背包容积的情况下, 每个物品可选无数个多重背包: 每个物品的个数有有限个, 不能超过背包容积, 不能超过该物品给定的个数分组背包: 每组物品只能选一个, 每组物品最多只能选一个01背包:题目1 链接:01背包问题dp数组的初始化:这里的选择是每个物品选或者不选, 所有的物品都可以都可以通过这个表达式推导出来,因为要求的是最大值, 所以最小值初始化原创 2022-05-09 16:16:14 · 262 阅读 · 0 评论 -
数字三角形
文字文字文字文字大概吧标题标题 vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; unordered_map<int, int> hash; for(int i = 0; i < nums.size(); i ++) { int another =原创 2022-05-08 23:27:54 · 497 阅读 · 0 评论