求把所给路径改成合法路径需要的最小修改次数
#include<stdio.h>
#include<string.h>
#define maxn 1010
#define INF 1<<30
char str[maxn];
int dp[maxn];
char vis[maxn][maxn];
void init()
{
int i;
memset(vis,-1,sizeof(vis));
for(i=1;i<=strlen(str+1);i++)
{
dp[i]=INF;
vis[i][i]=1;
}
}
int min(int a,int b)
{
return a>b?b:a;
}
int judge(int a,int b)
{
if(vis[a][b]!=-1)
return vis[a][b];
int i,j,flag=1;
for(i=a,j=b;i<=j;i++,j--)
{
if(str[i]!=str[j])
{
flag=0;
break;
}
}
vis[a][b]=flag;
return vis[a][b];
}
int main()
{
int i,j,k,l;
scanf("%d",&k);
while(k--)
{
scanf("%s",str+1);
init();
l=strlen(str+1);
dp[1]=1;dp[0]=0;
for(i=1;i<=l;i++)
{
for(j=1;j<=i;j++)
{
if(judge(j,i))
dp[i]=min(dp[i],dp[j-1]+1);
else
dp[i]=min(dp[i],dp[j-1]+i-j+1);
}
}
printf("%d\n",dp[l]);
}
return 0;
}