Description
—————————————————————————————————————
60%
#include<bits/stdc++.h>//q区间DP
using namespace std;
int dp[250][250],n;
char s[250];
bool huiwen(int l,int r)//判断是否回文
{
for(int i=l;i<=r;i++)
if(s[i]!=s[r-i+l])return false ;
return true;
}
int main()
{
cin>>n;
while(n--)
{
cin>>s+1;
int len=strlen(s+1);
memset(dp,0,sizeof(dp));
for(int i=1;i<=len;i++)dp[i][i]=1;//区间dp初始化,自己到自己只需要添加一个
for(int l=2;l<=len;l++)//枚举区间长度
{
for(int i=1;i<=len-l+1;i++)//枚举区间起始点
{
int j=i+l-1;
dp[i][j]=min(dp[i+1][j]+1,dp[i][j-1]+1);//头加一个或者尾加一个
if(huiwen(i,j)&&(l%2==0))//如果回文
dp[i][j]=min(dp[i][j],dp[i][i+l/2-1]+1);//第三种操作
}
}
cout<<dp[1][len]<<endl;//输出整个区间 的最优值
}
return 0;
}
100%
...