Palindrome

 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 }

 

posted on 2013-08-05 16:04  ok_boy  阅读(170)  评论(0编辑  收藏  举报

导航