![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
cy41
celery cabbage
展开
-
牛客寒假2020集训营3补题
J题意:思路很好想,先floyd,再dp。关键在于k2k^2k2的复杂度优化。全图只有200个点,最坏是一条链,而且每个精灵出现的时间是各不相同的,那么就说明将精灵按照出现时间排序后,只要两个精灵数组的相对距离是大于200的,那必然可以抵达,于是可以维护一个Max表示距离超出200的可以取得的最大值,那么复杂度可以降到k*n。#include<bits/stdc++.h>u...原创 2020-02-08 21:21:21 · 136 阅读 · 0 评论 -
牛客寒假2020集训营2补题
题意:将a数组排序。定义dp[x],为将下标属于[1,x]内的元素进行若干次魔法达到的最小值。则一个显然的想法是枚举i为终点,j为最后一次进行魔法的位置,则有dp[i]=j∈min(dp[j]−a[j+1])+a[i]dp[i]=j\in min(dp[j]-a[j+1])+a[i]dp[i]=j∈min(dp[j]−a[j+1])+a[i];...原创 2020-02-06 18:26:46 · 139 阅读 · 0 评论 -
区间dp入门题
最近学习了一下一些简单的区间dp的题目。蓝书和西北工业大学ACM2017暑假集训 - 区间DP这个。1.石子合并最多300个石子堆按顺序排列在一条数轴上,每次选择相邻两堆进行合并,合并代价为两堆石子石子数量之和,要求将所有石子堆合并为一堆最小化合并代价。考虑dp[l][r]dp[l][r]dp[l][r]为合并第lll到rrr堆石子的最小代价。则一个显然的状态转移为枚举中间点kkk,作为...原创 2020-02-03 23:09:05 · 193 阅读 · 0 评论 -
2020 CCPC-Wannafly Winter Camp Day3 G-火山哥周游世界(树形dp)
题目链接:G-火山哥周游世界题意:一颗n个点的无根带权树,有k个特殊点,可以走到任一个点停止,现在要让你求对于每个点i作为起始点,走遍所有特殊点所花的最小路径和,n<=5e5n<=5e5n<=5e5先考虑若要从起点出发,最后回到起点所需要的路径和,这个是到所有特殊点的所有边权加起来乘2,去和回。若不回到起点选择某个特殊点作为终点停止,则是上述路径和减去从起点到该特殊点的路径...原创 2020-01-28 11:12:21 · 341 阅读 · 0 评论 -
POJ3585(二次扫描与换根法)
题目链接:AcWing287题意:给定一颗无向带权树,要你找出一个节点作为根,向叶子节点流水,使流水量最大。二次扫描与换根法的入门题。设d[]表示以1为根的情况下,每个节点向他的子树流水量的最大值。那么可以得出转移方程:d[x]=∑y∈Son of x{min(d[y],edge(x,y)),deg[y]>1edge(x,y),deg[y]=1 d[x]=\sum_{y \i...原创 2020-01-15 18:29:48 · 560 阅读 · 0 评论 -
AcWing1073. 树的中心(树形dp)
题目链接:树的中心LT’s blog题意:找一个点,使得他到其他点的最长距离最小,边权有正有负。最开始的时候我想这个点一定在树的直径上的中点位置处,WA了好多次后注意到题目数据范围,把这个思路直径否决了。如果我们将这颗树化为一个有根树,那么一个点到其他点的最远距离就是:MAX(他到子树某个点的最远距离,他经过父亲节点到其他的点的最远距离)。第一部分可以直接一次dfs得到,对于第二部分来说...原创 2019-11-06 19:57:26 · 353 阅读 · 0 评论 -
斯坦纳树板子
给定点集,尝试加入一些边,以及其他点(可不加),使得这些点互相连通,且总权值和最小。这个板子好像会T,还是用这个吧:斯坦纳树const int maxm=2009;const int maxn=39;const int inf=0x3f3f3f3f;struct Edge{ int v,w,next;}edge[maxm];int head[maxn],top;...原创 2019-07-24 19:21:47 · 156 阅读 · 0 评论 -
牛客练习赛51 F-ABCBA(树链剖分,线段树,状态转移)
题目链接:F-ABCBA题意:给出一颗树,树上节点为一个字母,q次询问,每次询问u,v,从v到u的链上组成的字符串,包含序列"ABCBA"的个数(不是子串,可以不连续)。给要求的这个序列编号:1,2,3,4,5;首先树剖两次dfs预处理。定义a[i][j]a[i][j]a[i][j]表示当前串包含序列[i,j][i,j][i,j]的数量。用线段树来维护,正着合并以及反着合并,因为树剖查询...原创 2019-09-07 10:36:37 · 168 阅读 · 0 评论