随笔分类 -  oi / 动态规划

动态规划
摘要:动态规划条件 无后效性 :即已经求解的子问题不受后续阶段的影响 最优子结构性质 :即下一阶段的最优解应该能够由前面各阶段子问题的最优解导出 子问题重叠性 :即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其 阅读全文
posted @ 2024-02-17 20:44 风ffff 阅读(58) 评论(0) 推荐(0)
树形dp
摘要:树形dp 模型:给定一颗有n个节点的树,任选一个节点为根节点,从而定义出每个节点的深度和每棵子树的根。 树形DP的特殊性:没有环,dfs是不会重复,而且具有明显而又严格的层数关系。利用这一特性,我们可以很清晰地根据题目写出一个在树(型结构)上的搜索的程序。而深搜的特点,就是“不撞南墙不回头” 基本思 阅读全文
posted @ 2024-02-17 17:03 风ffff 阅读(55) 评论(3) 推荐(0)
坐标dp
摘要:坐标dp 坐标型dp一般都是给定网格、序列,来求满足某种性质的最大值、最小值。f[i][j]代表以i、j结尾的满足条件的某种情况。 典型例题:传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵 阅读全文
posted @ 2024-02-17 16:17 风ffff 阅读(62) 评论(0) 推荐(0)
区间dp
摘要:区间dp 区间dp属于线性dp的一种,以“区间长度”作为dp的“阶段”,用两个坐标(区间的左、右端点)描述每个维度。区间dp中,一个状态往往由若干个比它更小且包含于它的区间所代表的阶段转移而来,所以区间dp的决策往往就是划分dp的方法。(例:f[i][j]=f[i][k]+f[k+1][j]) 区间 阅读全文
posted @ 2024-02-17 15:37 风ffff 阅读(60) 评论(0) 推荐(0)
线性dp
摘要:线性dp 具有线性阶段划分的动态规划算法被统称为线性dp 经典例题有: 1.最长上升子序列(lis) 2.最长公共子序列(lcs) 3.数字三角形 这里给出最长上升序列的代码 for(int i=1;i<=n;i++){ f[i]=1; for(int j=1;j<i;j++){ if(d[i]>d 阅读全文
posted @ 2024-02-17 15:24 风ffff 阅读(36) 评论(0) 推荐(0)
背包dp
摘要:背包dp 背包dp的模型可以看作是“给定n个物品,从中选择一定的物品”。 我们从以下几个角度考虑: 1.已经选择的物品 2.背包容量 dp数组常常保存最大价值 0/1背包(一个物品只选一次) #include <bits/stdc++.h> using namespace std; const in 阅读全文
posted @ 2024-02-17 11:12 风ffff 阅读(44) 评论(0) 推荐(0)