求把所给路径改成合法路径需要的最小修改次数
#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; }