//Accepted 200 KB 63 ms
//区间dp
//dp[i][j] 从i位到j位能得到的最大匹配数
//dp[i][j]=max(dp[i+1][j-1] (s[i-1]==s[j-1]),dp[i][k]+dp[k+1][j])i<=k<j
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
;
int dp[imax_n][imax_n];
char s[imax_n];
int n;
int max(int a,int b)
{
return a>b?a:b;
}
int isMatch(char ch1,char ch2)
{
;
;
;
}
void Dp()
{
;i<=n;i++)
dp[i][i]=;
;l<=n;l++)
{
;i<=n;i++)
{
;
if (j>n) break;
dp[i][j]=;
],s[j-])) dp[i][j]=dp[i+][j-]+;
for (int k=i;k<j;k++)
dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+][j]);
}
}
printf(][n]);
}
int main()
{
]!='e')
{
n=strlen(s);
Dp();
}
;
}