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