专栏文章

题解:CF2068D Morse Code

CF2068D题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min8b8fj
此快照首次捕获于
2025/12/01 22:12
3 个月前
此快照最后确认于
2025/12/01 22:12
3 个月前
查看原文
感觉还是对 DP 过程中算贡献和分布转移的理解不是很深刻。
对二叉树形态 DP,由于节点放置不连续,显然要按深度 DP。
fi,j,k,lf_{i,j,k,l} 表示 ii 个叶子,jj 个最大深度的叶子,kk 个次大深度的叶子,最大深度是 ll,可以做到 O(n5)O(n^5)
我尝试了在转移时算贡献,但是没有成功,因为最终排名不确定。
事实上,DP 过程中算贡献和分布转移本质上是让每个点实时有贡献,并且固定一些点停止贡献。
对于扩展深度为 22 的点,我们并不用管,因为我们每次只会把点的最浅深度集体下移 11,且点只有在作为最浅深度时才会被固定。
因此这个点的实际深度就是这个点(这个点不存在时我们认为这个点的祖先就是这个点)在状态里的时间 1-1
fi,j,kf_{i,j,k} 表示固定了 ii 个叶子不再扩展,在未固定的叶子中有 jj 个最大深度、kk 个次大深度的叶子。
则要么固定一个次大深度的叶子,要么把次大深度的叶子全部扩展。
fi,j,kfi+1,j,k1fi,j,k+wfi,k,j+kf_{i,j,k}\to f_{i+1,j,k-1} \\ f_{i,j,k}+w\to f_{i,k,j+k}
ww 表示 pp 的第 i+1ni+1\sim n 大的和,答案为 fn,0,0f_{n,0,0},构造方案是简单的。
O(n3)O(n^3)
double 要加上 0.50.5 再转为 int 啊啊啊。

评论

0 条评论,欢迎与作者交流。

正在加载评论...