
动态dp
文章平均质量分 64
小衣同学
No Saturday , no Sunday , no holiday .
展开
-
Codeforces Round 975 (Div. 1) D. Max Plus Min Plus Size(思维题 并查集/动态dp 线段树维护状态合并)
f[x][i][j][k]表示线段树的x节点,最大值有没有取到,左端点有没有选,右端点有没有选,如果最大值被包含在1 3 5里显然取1 3 5,否则换成2 4一定能取到最大值,是不劣的,对于最小值固定的话,对于1 2 3 4 5的连续段,要么贪心地取1 3 5,要么取2 4。如果存在一个连续段,使得选这个连续段中较多的那一半(奇数唯一,偶数均可)能取到最大值。则答案不需要减1,否则为了取到最大值需要反选,将答案减1。hhoppitree代码 + 官方题解。注意到最大值一定会被取到,原创 2024-09-28 19:48:44 · 931 阅读 · 0 评论 -
AtCoder Beginner Contest 351 G. Hash on Tree(树剖维护动态dp 口胡题解)
l为重链头的dfs序,r为叶子重链尾的dfs序时,这个区间节点对应的(a,b)中a的值。由于为0的值会对运算值有影响,并且儿子f值从一个0变成没有0的时候难以恢复之前的乘积,基本是对于有根树树形dp,想动态获取根节点的dp值,dp值和树上点权相关,点权带修,所以单独记录0的个数,所以变更的时候,动态记录链头点的f值为0的儿子的数量。其中,b是f值非零的轻儿子的f积,x是重儿子的f值(未知,待代入)递归到叶子的时候,由于叶子不存在重儿子,x值为0,所以链头的f值,就是当线段树区间[l,r],原创 2024-04-28 04:51:32 · 463 阅读 · 0 评论