[模拟]20220330
T1
一个比较奇怪的树形 DP。
首先看到 \(n \le 3000\) 复杂度就很显然应该是 \(n^2\) 的。
然后考虑设计 DP 状态,令 \(f_{u,v}\) 表示 \(u\) 最近中转点为 \(v\) 时 \(u\) 子树内的最小代价。
最后取 \(\min_{i = 1}^{n} f_{1,i}\)。
但是赛时没想到怎么转移,但是其实还是比较容易想的。
另一个做法就是因为放关键点有代价,有点像树上背包的感觉,向这方面想,维护 \(f_{u,k}\) 表示 \(u\) 子树内有 \(k\) 个未匹配关键点的最小代价,\(g_{u,v}\) 表示 \(u\) 子树内所有关键点已经被覆盖且强制其他节点从 \(u\) 转移时匹配的点为 \(v\) 的最小代价,不是很好懂。
T2
线性代数。
之前集训的时候见过,于是写的当时讲的 \(n^{3/4}\) 的做法,然后得了 \(60\)。
差分一下,再综合一下杜教筛的求和法,改一下就 \(100\) 了。
T3
一眼线段树,然后正解确实是线段树。
贡献的计算规则很诡异,于是一直在找规律,只找到了按每种长度区间贡献个数考虑,最后找规律失败了导致啥也没维护出来。
std 写的是动态 DP,很屑。
总结
一会想 T1 一会想 T3 的结果就是一道都切不了。
作者:AstatineAi
本文为 作者 AstatineAi 的原创,遵循CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。