1 #include<string.h> 2 #include<stdio.h> 3 char a[5010],b[5010]; 4 short int dp[2][5010]; 5 int LCS(int n,int m) 6 { 7 memset(dp, 0, sizeof(dp)); 8 int i,j; 9 for(i=1;i<=n;i++) 10 for(j=1;j<=m;j++) 11 { 12 if(a[i-1]==b[j-1]) 13 { 14 dp[i%2][j]=dp[(i-1)%2][j-1]+1; 15 //printf("%d %d %d ",i%2,j,dp[i%2][j]); 16 } 17 else if(dp[(i-1)%2][j]>=dp[i%2][j-1]) 18 { 19 dp[i%2][j]=dp[(i-1)%2][j]; 20 //printf("%d %d %d ",i%2,j,dp[i%2][j]); 21 } 22 else 23 { 24 dp[i%2][j]=dp[i%2][j-1]; 25 } 26 } 27 return dp[n%2][m]; 28 } 29 int main() 30 { 31 int i,j,n; 32 while(scanf("%d",&n)!=EOF) 33 { 34 getchar(); 35 gets(a); 36 37 for(i=n-1,j=0;i>=0;i--,j++) 38 { 39 b[j]=a[i]; 40 } 41 //printf("%s %s ",a,b); 42 printf("%d ",n-LCS(n,n)); 43 } 44 return 0; 45 }