cf晚间档一反常态,B和C交换了难度,真是有趣。
记忆化搜索,3种状态,暴力的搜一下,没想到这么做。还是道行不够。
-----------------因为热爱,所以执着-----------------------
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
char s[5005];
int dp[5005][5],n;
int solve(int pos,int now)
{
if(now>3||pos>n)return 0;
if(dp[pos][now]!=-1)return dp[pos][now];
int res=0;
if(now==1||now==3)
{
if(s[pos]=='a')
res=max(res,1+solve(pos+1,now));
else res=max(res,solve(pos+1,now));
}
if(now==2)
{
if(s[pos]=='b')
res=max(res,1+solve(pos+1,now));
else res=max(res,solve(pos+1,now));
}
if(now<3)
{
res=max(res,solve(pos,now+1));
}
dp[pos][now]=res;
return dp[pos][now];
}
int main()
{
scanf("%s",s+1);
n=strlen(s+1);
memset(dp,-1,sizeof(dp));
printf("%d\n",solve(1,1));
return 0;
}