本文主要是介绍HDU-1513 Palindrome LCS+滚动数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*
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;elsedp[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+滚动数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!