DAY9 7.30

模拟赛
A:简单题。

B:高维后缀和(SOS dp)板题,可以稍作复习。

//遍历x的所有子集,O(3^N),其中N为log x
for(int i=x;i;i=x&(i-1)) 
//高维后缀和,注意转移顺序,但本题求max,即使重复计算也无所谓
for(int i=0;i<20;i++)
	for(int j=0;j<n;j++)
		if(!((i>>j)&1)) chkmx(f[j],f[j^(1<<i)]);

C:注意到,我们先不考虑要怎么选择一次操作的 l,rl,rl,r,我们先考虑要在哪些地方断开。发现如果将某个区间断开,我们可以将这个区间加上一个极大值,使这个区间永远和其他区间不一样。所以不难发现一种策略,即贪心的断开区间,能不断就不断,直到必须要断的时候,最后判断一下首尾两个区间是否有重复,然后除以 222 即可。但这个做法是错误的(我也不太知道为什么),因为其实首尾两个区间如果相同是要多一次操作的,所以我们并不能贪心的选择第一个区间。所以我们考虑枚举第一次断开的位置 lll,使用双指针维护 rrr,使得 1∼l1\sim l1lr∼nr\sim nrn 中无重复元素。再预处理一个数组,记录 iii 至少要跳(断)多少次才能到 nnn,并记录最后一个跳(断)的位置。然后开始做,我们发现,如果从 l+1l+1l+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值