模拟17 题解

A. 入阵曲

求每一行的前缀和,

枚举左右端点,O(n)扫下去,顺便更新桶。

维护栈清空桶中的内容。

 

 

 


 

B. 将军令

k=1,小胖守皇宫弱化版。

与小胖守皇宫比较,发现特殊性质:

点没有权值。

考虑贪心。

每次找出深度最深的点,点亮它的k级父亲。

1.点亮k级父亲比点亮它的任何一个儿子更优,因为能更多的覆盖到该子树外的节点。

2.点亮k级父亲子树以外的点,不能覆盖到深度最深的点。

综上,该贪心策略是正确的。

 

考试时想到了这个贪心策略,

然而受小胖守皇宫限制,固执地认为贪心一定不成立。

那道题已经做过去很久,已经忘记了差异点。

其实可以尝试一下贪心,打个对拍的。

 

 

 


 

C. 星空

区间翻转的修改很大,难处理。

考虑如何将区间修改为单点。

差分即可。

设$a_i$表示第$i$盏灯的初始状态,1为灭,0为亮。

设$b_i=a_i$^$a_{i+1}$,显然b的前缀和表示单点的a值。

将区间修改$(l,r)$转化为单点修改$l-1$和$r$,将两个值取反就达到了区间修改的效果。

要求的最终状态是b数列全为0。

将两个0取反为1是没有意义的。

有意义的移动是将一个1不断与0取反,直到两个1共同取反为0。

bfs处理出一些1之间的路径,对不超过2k个1之间进行状压。

复杂度为$O(2^{2k}*k^2+nmk)$

然而dp转移有一些冗余。

固定一个转移的顺序可以达到优化的效果。

每次转移第一个1,复杂度为$O(2^{2k}*k+nmk)$。

 

转载于:https://www.cnblogs.com/skyh/p/11334880.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值