#include <iostream>
#include <string.h>
typedef long long ll;
using namespace std;
char ch[1001];
bool judge(int a,int b)
{
for(int i=0;i<=(b-a)/2;i++)
{
if (ch[a+i]!=ch[b-i])
return false;
}
return true;
}
void _dp(int n)
{
int dp[1001];
dp[0]=1;
for(int i=1;i<=n;i++)
{
dp[i]=1005;
for(int j=0;j<=i;j++)
{
if (judge(j,i))
{
dp[i]=min(dp[j-1]+1,dp[i]);
}
}
}
cout<<dp[n-1]<<endl;
}
int main()
{
ll num;
cin>>num;
while(num--)
{
cin>>ch;
_dp(strlen(ch));
}
}
解法二
#include <iostream>
#include <string.h>
typedef long long ll;
using namespace std;
char ch[1001];
bool judge(int a,int b)
{
for(int i=0;i<=(b-a)/2;i++)
{
if (ch[a+i]!=ch[b-i])
return false;
}
return true;
}
void _dp(int n)
{
int dp[1001];
dp[0]=1;
for(int i=1;i<=n;i++)
{
dp[i]=1005;
for(int j=0;j<=i;j++)
{
if (judge(j,i))
{
dp[i]=min(dp[j-1]+1,dp[i]);
}
}
}
cout<<dp[n-1]<<endl;
}
int main()
{
ll num;
cin>>num;
while(num--)
{
cin>>ch;
_dp(strlen(ch));
}
}