
dp
文章平均质量分 66
bandiaoz_cjl
这个作者很懒,什么都没留下…
展开
-
D-Double Strings 2021牛客多校5
D-Double Strings题意给两个字符串 AAA 和 BBB (1≤∣A∣,∣B∣≤5000)(1\le |A|,|B| \le 5000)(1≤∣A∣,∣B∣≤5000) , aaa 是 AAA 的子序列, bbb 是 BBB 的子序列,求有多少个子序列组合满足两个子序列的长度相同并且 ∃i∈{1,2,…,∣a∣},Aai<Bbi,∀j∈{1,2,…,i−1},Aaj=Bbj\exists i \in \{1, 2, \dots, |a|\},A_{ai} < B_{bi},\f原创 2021-07-31 21:25:52 · 250 阅读 · 0 评论 -
牛客 Shortest Path 树形dp
牛客 Shortest Path题意一棵 n(保证n是偶数)n(保证n是偶数)n(保证n是偶数) 个点的树,边带权。要求找出 n2\frac{n}{2}2n 对点,使得每个点对的距离之和最小。题解首先一条边不会被覆盖两次,如果覆盖了两次,一定有更优的组合方案;对于一个点 uuu ,一定是优先子树内部消耗,否则 uuu 和 uuu 的父亲节点的边会被多次计算;如果点 uuu 的子树大小是偶数,那么一定会内部消耗,否则 uuu 需要连向 uuu 的父亲节点。代码#pragma region原创 2021-01-27 15:28:01 · 119 阅读 · 0 评论 -
牛客 Rinne Loves Edges 树形dp
牛客 城市网络题意有一棵 nnn 个点的树,首先选取一个点 sss ,选择性的删除一些边,删边的代价是边的边权,要求删边之后没有原图中度为 111 的点可以到达 sss 。求最小的删边代价。题解树形dp,以 sss 为根建树;对于每一个点 uuu ,要么孩子 vvv 也不可到达,要么删除连向 vvv 的边,即 dp[u]=min(dp[v],w)dp[u]=min(dp[v],w)dp[u]=min(dp[v],w)。代码#pragma region//#pragma optimize(原创 2021-01-18 00:16:26 · 154 阅读 · 1 评论 -
Codeforces Round #695 (Div. 2) D. Sum of Paths(dp)
D. Sum of Paths题意一共有 nnn 个格子,每个格子都有一个值 aia_iai。一开始可以在任意一个格子放置一个机器人,机器人精确的走 kkk 步经过 k+1k+1k+1 个格子,走过一个格子产生 aia_iai 的贡献,问所有不同的走法产生的总贡献,有 qqq 次询问,每次询问都可以修改一个格子的值。题解先预处理出所有走法每个格子会被走的次数总和,然后每次询问 O(1)O(1)O(1) 计算即可。dp[i][j]dp[i][j]dp[i][j] 表示第 jjj 步走到第 i原创 2021-01-11 23:56:33 · 166 阅读 · 0 评论 -
合并回文子串
合并回文子串题意有两个字符串 AAA,BBB,可以合并成字符串 CCC ,满足字符串 AAA 和 BBB 在字符串 CCC 中顺序不变。求C的最长回文子串的长度。题解区间dp分别从小到大枚举两个字符串的长度, 然后枚举两个子串的左端点,计算出子串的右端点。dp[i][ii][j][jj]dp[i][ii][j][jj]dp[i][ii][j][jj] 表示 A[i,ii]A[i,ii]A[i,ii] 和 B[j,jj]B[j,jj]B[j,jj] 组合的字符串是不是一个回文串,这个回文串的左原创 2020-12-28 15:17:53 · 304 阅读 · 0 评论 -
洛谷 P2634 [国家集训队]聪聪可可 (点分治,树形dp)
洛谷 P2634 [国家集训队]聪聪可可题意给一棵 nnn 个节点的树,边带权。任选两点(可相同),求两点之间简单路径长度恰好是 333 的倍数的概率。解法树上路径询问?立即推:点分治!枚举每个点作为lca ,维护子树的点到 lca 距离模 333 的数量,然后先遍历子树先更新答案再更新数量即可。复杂度为 O(nlogn)O(nlogn)O(nlogn)。当然这题也可以直接树形dp,码量一下子就小了很多,原理也是类似的。复杂度为 O(kn)O(kn)O(kn)。kkk 为模数,本题 k=3k=原创 2020-12-03 20:12:52 · 144 阅读 · 0 评论 -
洛谷 P4381 [IOI2008]Island
洛谷 P4381 [IOI2008]Island题意给出一个基环树森林,求所有基环树的直径的和。解法基环树可以看作一个环上连着很多小树,那么直径可能是小树的直径,也可能是两棵小树的深度之和加环上距离较大的部分。小树的直径可以在拓扑排序的时候维护好,ans1[v] = max({ans1[v], d[u] + d[v] + e.second, ans1[u]});,这样可以直接访问根,也就是环上的点来询问直径,后者需要在环上做dp,类似于 环路运输 ,并且这里求最大值,环的距离也是取最大值,所以可以不原创 2020-11-30 03:23:30 · 459 阅读 · 0 评论 -
洛谷P2607 [ZJOI2008] 骑士 基环树森林dp(二次dp法)
洛谷P2607 [ZJOI2008] 骑士题意有 nnn 个骑士,每个骑士有讨厌的人(不是自己),选出一个骑士团,没有讨厌的人和自己在一个骑士团。问骑士团的最大的战斗力。解法类似没有上司的舞会。这题有很多坑:不一定是根节点处在环内;二元环的处理;有多个连通块,这是一个基环树森林,需要对答案相加;答案暴 intintint 。二次树形dp法;二元环的处理,应该标记不访问的边的编号,而不是边的顶点;对于每一棵基环树,在环上选一条边,强制不选这个边上的一个点,做一次dp,再强制选,这样就可以忽略原创 2020-11-26 16:45:35 · 192 阅读 · 0 评论 -
AcWing 285. 没有上司的舞会 (树形dp)
AcWing 285. 没有上司的舞会题意nnn 名职员的关系构成一棵树,父节点是子节点的直接上司。每个职员有一个快乐指数。现在开一场宴会,职员不与直接上司一起参会,问参会职员的快乐指数总和的最大值。解法树形dp先找没有上司的职员是根;dp[u][0]dp[u][0]dp[u][0] 表示职员 uuu 不参加的情况,以 uuu 为根的子树的最大快乐总和;dp[u][1]dp[u][1]dp[u][1] 表示职员 uuu 参加的情况,以 uuu 为根的子树的最大快乐总和;$ dp[u][1]原创 2020-11-25 23:40:13 · 180 阅读 · 0 评论 -
289. 环路运输 - AcWing 滑动窗口维护环形dp
289. 环路运输 - AcWing题意一个环形公路上有 nnn 个仓库,仓库之间的距离为两种走法的较小值,即 dis(i,j)=min(∣i−j∣,n−∣i−j∣)dis(i,j)=min(|i-j|,n-|i-j|)dis(i,j)=min(∣i−j∣,n−∣i−j∣) 。从仓库 iii 到仓库 jjj 的运输代价为 ai+aj+dis(i,j)a_i+a_j+dis(i,j)ai+aj+dis(i,j) 。求最大的运输代价。解法首先考虑把环展开成链,再复制一段。即 ai+n=aia_{i原创 2020-11-25 16:26:39 · 180 阅读 · 0 评论