2种颜色,染色
k
次最多可以把序列变成
fi,j,k
表示前
i
个数,染了
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int Ans;
int i,j,k,n,m,f[100001][100][2],x,p;
int main(){
scanf("%d%d",&n,&k);
k=k-1<<1|1;
for(i=1;i<=n;i++){
scanf("%d",&x);
for(j=1;j<=k;j++)
for(p=0;p<2;p++)
f[i][j][p]=max(f[i-1][j-1][p^1]+(x==p),f[i-1][j][p]+(x==p));
}
for(j=1;j<=k;j++)
for(p=0;p<2;p++)
Ans=max(Ans,f[n][j][p]);
cout<<Ans<<endl;
return 0;
}