/*
http://acm.hdu.edu.cn/showproblem.php?pid=1513
将原字符串倒置,然后与原字符串求最长公共子序列,
答案就是len-dp[len][len]。
*/
#include "stdio.h"
#include "string.h"
const int maxn = 510;
int n;
char str1[maxn],str2[maxn];
int dp[3][maxn];
int Max( int a,int b )
{
return a>=b?a:b;
}
int get_do()
{
memset(dp,0,sizeof(dp));
for( int i=1;i<=n; i++ )
{
for( int j=1;j<=n;j++ )
{
if( str1[i-1]==str2[j-1] )
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] );
}
}
return n-dp[n%2][n];
}
int main()
{
while( scanf("%d",&n)!=EOF )
{
getchar();
gets(str1);
for( int i = 0;i<n;i++ )
{
str2[i] = str1[n-i-1];
}
str2[i] = 0;
printf("%d\n",get_do());
}
return 0;
}
HDU-1513 Palindrome LCS+滚动数组
最新推荐文章于 2017-08-29 15:59:31 发布