POJ 1159 Palindrome

解题思路:求解原串与其反串的LCS

  
    
#include < iostream >
using namespace std;
int main()
{
int n,ai,bi,i,j,opt[ 2 ][ 5001 ] = { 0 };
char a[ 5001 ];
scanf(
" %d\n%s " , & n, a);
for (ai = 0 ,bi = i = 1 ;i <= n;i ++ ,j = ai,ai = bi,bi = j)
for (j = 1 ;j <= n;j ++ )
if (a[i - 1 ] == a[n - j])opt[bi][j] = opt[ai][j - 1 ] + 1 ;
else opt[bi][j] = max(opt[ai][j],opt[bi][j - 1 ]);
printf(
" %d\n " ,n - opt[ai][n]);
return 0 ;
}

 

你可能感兴趣的:(poj)