POJ 1159 Palindrome 滚存

11613675CKboss1159Accepted792K1110MSG++635B2013-05-19 15:51:30

#include <iostream>

#include <algorithm>
#include <cstring>

using namespace std;

int dp[2][5555];

int main()
{
    char s1[5555],s2[5555];
    s1[0]=s2[0]=':';
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
      {
          cin>>s1;
          s2=s1;
      }
    reverse(s2+1,s2+1+n);
//    cout<<s2;
    memset(dp,0,sizeof(dp));

    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
    {
        if(s1==s2[j])
            dp[i%2][j]=dp[(i-1)%2][j-1]+1;
        else
            dp[i%2][j]=max(dp[(i-1)%2][j],dp[i%2][j-1]);
    }

    cout<<n-dp[n%2][n]<<endl;

    return 0;
}

原文地址:https://www.cnblogs.com/CKboss/p/3351057.html