【Codeforces】1120 Round #543 Div. 1 B-F简要题解

博客详细介绍了Codeforces第1120场竞赛中Div. 1部分B到F题的解题思路,涉及贪心算法、字符串压缩、树形结构优化、动态规划和数学问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门:CF1120


B.Once in a casino

一道贪心坑了好多人啊(包括我)。

首先存在以下情况是无解的:

不考虑 0 − 1 , 9 + 1 0-1,9+1 01,9+1的合法性,贪心依次让 1 − ( n − 1 ) 1-(n-1) 1(n1),即 ( 1 , b 1 − a 1 ) , ( 2 , b 2 − ( a 2 + ( b 1 − a 1 ) ) ) (1,b_1-a_1),(2,b_2-(a_2+(b_1-a_1))) (1,b1a1),(2,b2(a2+(b1a1)))( ( i , j ) (i,j) (i,j)表示将 a i , a i + 1 a_i,a_{i+1} ai,ai+1同时 + j +j +j)。
a n a_n an是不能单独操作的,若 a n ≠ b n a_n\neq b_n an̸=bn,则必然无解。

可以证明除了上面的情况以外一定有解(证明略):
每次贪心操作最前可以操作的位置,步数一定是最少的。


C.Compress String

SAM DP裸题,不解释。


D.Power Tree

转化一下题目的要求(设叶子结点个数为 k k k):,选择 k k k个结点,使得每个结点子树内不经过其它选择的结点所能到达的叶结点都是唯一且各不相同的,要求最小化 ∑ C i \sum C_i Ci

考虑 f [ i ] [ 0 / 1 ] f[i][0/1] f[i][0/1]表示以 i i i为根的子树还剩 0 / 1 0/1 0/1个叶子结点没被覆盖的最优答案。

答案即 f [ 1 ] [ 0 ] f[1][0] f[1][0]

如何寻找哪些点可能出现在最优点内呢?似乎可以再DP一遍。

考虑从状态 g [ 1 ] [ 0 ] g[1][0] g[1][0]出发进行 b f s bfs bfs(设 s u m u = ∑ v ∈ s o n u f [ v ] [ 0 ] sum_u=\sum \limits_{v\in son_u}f[v][0] sumu=vsonuf[v][0]):

  • 状态 g [ u ] [ k ] g[u][k]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值