删除字串
题目描述:https://www.nowcoder.com/acm/contest/79/C
这道题用dp做的
#include<stdio.h>
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
char s[100002];
int a[100002][12][2],b[100002];
int main()
{
int i,j,n,m,t,k,ans=0,temp,p;
scanf("%d%d",&n,&m);
scanf("%s",s);
if(s[0]=='a')
a[0][0][0]=1;
for(j=1;j<n;j++)
{
if(s[j]=='a')
a[j][0][0]=a[j-1][0][0]+1;
else
a[j][0][0]=a[j-1][0][0];
}
for(i=0;i<n;i++)
{
if(s[i]=='a')
{
t=i;
break;
}
}
for(i=t+1;i<n;i++)
{
if(s[i]!=s[i-1])
b[i]=b[i-1]+1;
else
b[i]=b[i-1];
}
for(i=1;i<=m;i++)
{
a[t][i][0]=a[t][0][0];
}
for(i=t+1;i<n;i++)
{
for(j=1;j<=m;j++)
{
k=b[i];
p=s[i]-97;
if(j<=k)
{
if(s[i]!=s[i-1])
{
a[i][j][p]=max(a[i-1][j][p]+1,a[i-1][j-1][p]+1);
a[i][j][p]=max(a[i][j][p],a[i-1][j-1][p^1]+1);
a[i][j][p^1]=max(a[i-1][j][p^1],a[i-1][j-1][p^1]);
}
else
{
a[i][j][p]=max(a[i-1][j-1][p]+1,a[i-1][j][p]+1);
a[i][j][p]=max(a[i-1][j-1][p^1]+1,a[i][j][p]);
a[i][j][p^1]=max(a[i-1][j-1][p^1],a[i-1][j][p^1]);
}
}
else
{
a[i][j][p]=a[i][k][p];
a[i][j][p^1]=a[i][k][p^1];
}
}
}
ans=max(a[n-1][m][0],a[n-1][m][1]);
printf("%d",ans);
return 0;
}