题目链接
题意:给你一个长度是n的01序列,然后你可以选择一个非空子串,进行反转操作,0变1,1变为0(只能操作以次),最后能形成的最长的交替序列,一共有多长。
解法:写几个情况分析下,就会发现,每次最多只能增加2,对于这个长度2的产生。
一:明显只要原来的序列存在长度不小于3的颜色一样的子串,就可以增加2,比如0[111]0–>01[0]10
二:(比赛的时候没有想到的),就是原来序列没有上述一的情况,但是也会增加2,比如101[10101]–>101[01010],这个情况刚好是min(n,sum+2),sum是原来的01交替序列
#define CF
#ifndef CF
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string><