dp
Aby_Lightman
这个作者很懒,什么都没留下…
展开
-
3075 走捷径
求在树上长为K的最短边数。 N<=2e5,K<=1e6 对70%数据k<=10040分O(n^2)终态枚举。 枚举根,dfs访问到每个点的距离,可以最优性减枝。70分O(n*K)树形dp。 定义dp[i][j]为到i距离为j的最短边数,考虑树上传过i的路径时,在i子树下选2个节点x,y,要求他们不在i的同一棵子树里,这可以用先访问一遍子树求答案,再访问一遍子树记录dp值来解决。转移的方程:M原创 2016-10-08 15:18:56 · 579 阅读 · 1 评论 -
2014
2014 D1T2 联合权值 Task N节点树,每个点有权值val i,定义有序点对(u,v)距离为2时,存在联合权值为val[u]*val[v]。 求最大的联合权值,所有点对联合权值之和%10007 N<=2e5,val<=1e4 (u,v) (v,u)是2组不同的符合条件的点对。 Solution 暴力枚举 用floyed或bfs预处理任意两点之间的距离。O(n^2)找出所原创 2016-11-07 16:52:56 · 224 阅读 · 0 评论 -
3080 道路规划
Task 给两行数1-n的序列,相同的数连线,求最大的集合满足集合中任意两个数都相交。Solution 比赛的时候想歪了,认为它求最大独立集。于是把任意不相交的两个数之间连边, 求出的一个最大独立集必定是任意两个都相交的。但是!但是!匈牙利算法是用来求二分图的最大独立集的,但是构建的图并不一定是二分图。 正解=反向求LIS。如果x,y是相交的,观察第二行,发现符合逆序对的概念,如果这个集合中原创 2016-10-26 22:17:00 · 416 阅读 · 0 评论 -
3065 交叉匹配
Task 给定两行数,求这两行数的最大交叉匹配数。 交叉匹配的原则: ① 上下两行,只有值相同的才能连线匹配。 ② 任意一条a匹配线有且仅有一条b匹配线和它相交,且a,b数值不同。 左边是合法的,而右边是不合法的。 N<=2000Solution 观察到,如果a,b上下相交,那么两个红色箭头范围内的不可能再有匹配线,否则就不满足②条件。那么一対匹配会把区间分割出独立的一段,类原创 2016-10-30 22:25:05 · 524 阅读 · 0 评论 -
3031 序列
Task 序列有N个数,m种变化(a,x) 表示A[a]可以变成x,求最长子序列满足任意1个变化或都不变化,子序列都不降。 N<=1e5+3Solution 子序列是由一个一个数构成的,且相邻两数之间满足 Mi[i]>=v[j],v[i]>=mx[i],i>jMi[i]>=v[j],v[i]>=mx[i],i>j由“最长子序列”和“不降”,我们想到了LIS,普通的LIS转移: A[i]>A原创 2016-11-12 07:34:22 · 365 阅读 · 0 评论 -
D2T2 子串
Task: 从A中取出K个互不重叠的非空子串,顺序链接构成B串的方案数。 取出位置不同认为是不同的方案。 对于第 1 组数据:1≤n≤500,1≤m≤50,k=1; 对于第 2 组至第 3 组数据:1≤n≤500,1≤m≤50,k=2; 对于第 4 组至第 5 组数据:1≤n≤500,1≤m≤50,k=m; 对于第 1 组至第 7 组数据:1≤n≤500,1≤m≤50,1≤k≤原创 2016-11-14 13:56:47 · 347 阅读 · 0 评论 -
1725 天黑请闭眼
方法一:树形dp 如果点(i,f[i])建边,得到基环外向树、 相邻两个点不能同时作为杀手,即相邻两个点不能同时取。把环砍掉一条边,变成了树,根据“没有上司的舞会”,定义dp[0][x],表示x不取最大杀手数,dp[1][x]表示x取得最大杀手数。 砍的边(a,b)有三种情况:a,b都不取,a取b不取,a不取b取。 简化情况2中:a一定不取,b随便去不去,b一定不取,a随便去不去。 一定不原创 2016-11-14 22:19:58 · 424 阅读 · 0 评论