动态规划
文章平均质量分 56
Eter`nal
蒟蒻菜鸟的进阶之路。
展开
-
动态规划—树形dp
树形dp是关于树上的动态规划问题,对于父节点和子节点互相有影响的问题。 经典例题:没有上司的舞会 https://www.acwing.com/problem/content/287/ 大意:有n名职员,编号1~n。每名职员有个幸福指数h[i]。他们的关系构成一棵树,父节点是子节点的直接上司,现要参加舞会,每个人都不愿和它的直接上司一同参加舞会,求参加舞会的幸福指数之和的最大值。 思路:对于每名职员,要么参加要么不参加,我们用0代表不参加,1代表参加。 状态表示 f[i,j] 表示编号 i 的职员为根的子原创 2021-07-17 19:03:18 · 82 阅读 · 0 评论 -
动态规划—区间dp
区间dp 即是状态表示为一段区间。计算某段区间的属性是要确保其子区间已经被计算过,所以一般先按区间长度从小到大进行枚举。 例题1:石子合并 https://www.acwing.com/problem/content/284/ 大意:有一堆连续的石子,每堆石子都有一定的石子数。每次只能合并相邻的两堆石子,合并两堆石子所耗费的体力值为两堆石子数目之和,求把所有石子合并为一堆所耗费体力的最小值。 思路:状态表示:f[i,j]表示从第 i 堆合并到第 j 堆所耗费的体力,属性为最小值。 根据最后一步,将最后某两大原创 2021-07-17 15:20:22 · 56 阅读 · 0 评论 -
最长上升子序列,最长公共子序列以及最长公共上升子序列问题
最长上升子序列问题:给定序列 a ,求 a 中上升子序列的最大长度。 状态表示:f[i]表示以a[i]结尾的上升子序列长度,属性为最大值。对于状态划分一般以 ‘最后’ 为依据,寻找状态转移方程。对于此题 ‘最后’ f[i]的值是否变化,当算f[i] 时,很显然要和倒数第二个比较来判断是不是递增。所以状态划分就以倒数第二个数为依据,即倒数第二个数不存在,倒数第二个数为a[1],为a[2]…为a[i-1]。所以状态转移方程为 i f ( a [ i ] > a [ k ] ) f [ i ] = m .原创 2021-06-18 12:04:28 · 367 阅读 · 0 评论 -
状态机模型
首先了解何为状态机? 状态机:它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态, 状态机停止。(百度搜的,反正我是看不懂。) 换句人话来说就是不同状态可以通过某些方式进行转换。例如在游戏中,操作人物从走的状态变成跑的状态这种就可以可以称为状态机。(这些都不重要,就是个名字而已。) 状态机模型:..原创 2021-06-09 21:14:47 · 915 阅读 · 0 评论 -
背包问题总结
基础背包问题: 01背包问题:在不超过背包容量的情况下,每种物品最多选一次,求选择方案的最大价值。 朴素版:状态表示:f[i,j]表示从前i个物品中选,体积不超过j的选择方式。属性为最大值。 状态划分:因为每个物品要么选要么不选两种情况,所以将f[i,j]按照第i个物品选不选划分为两部分, 第i个物品不选,显然状态表示为f[i-1.j]。第i个物品选,直接表示不太好表示,所以采用曲线救国的方式,先去掉第i个物品,则此时的状态表示为f[i-1,j-v[i]],再加上它,所以选第i个物品就可表示为f[i-1原创 2021-05-14 19:25:39 · 198 阅读 · 0 评论