#2 CF1689 Div.2

本文介绍了如何使用贪心策略和简单树形动态规划解决字符串处理问题,关注如何在子树中保存点以达到最优。关键步骤包括判断点的位置、利用lowbit操作连接节点以及确定答案上界。
摘要由CSDN通过智能技术生成

A

贪心就行,不过一开始没看见字符串可以任意取,以为是必须按字符串里的顺序选。

B

考虑贪心的,每次把最小符合条件的放到当前位置上,不过这样可能会导致最后两位不符合条件,特判一下即可。

C

简单树形 DP,令 f i f_i fi 表示以 i i i 为根的子树内最多保存多少个点,那显然有 f i = max ⁡ ( f l s o n + s i z r s o n − 1 , f r s o n + s i z l s o n − 1 ) f_i=\max(f_{lson}+siz_{rson}-1,f_{rson}+siz_{lson}-1) fi=max(flson+sizrson1,frson+sizlson1)

D

观察样例发现,选取的点的坐标一定在左上、左下、右上、右下的四个 B B B 点内部,否则一定不优。

问题转化为找这四个 B B B 点,记坐标为 ( i , j ) (i,j) (i,j),发现左上右下的点是 i + j i+j i+j 最小/最大的点,
右上左下的点是 i − j i-j ij 最小/最大的点。

然后枚举每个点取最优即可。

E

首先 0 0 0 肯定是要变成 1 1 1 的。

我们找到 l o w b i t lowbit lowbit 最高的一个数 x x x,将其 − 1 -1 1 便能与其余 l o w b i t lowbit lowbit 比它小的数全部连通,若还有与 x x x l o w b i t lowbit lowbit 相等的数,随便找一个 + 1 +1 +1 即可全部连通。

于是我们得出结论:答案上界不超过 2 2 2

然后我们只需要检验操作一次是否能满足条件即可,如果不能就按上述方案操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值