51Nod1092 迴文字符串(LCS)

這道題我現在還很迷,只知道把字符串逆序,然後求兩個字符串的LCS,最後字符串的長度減去公共子串長度,就是答案。但是爲什麼是這樣呢?我很迷啊。。。。。。。。。。。。。。。who can tell me?

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int dp[1005][1005];
int main()
{
	string a;
	cin>>a;
	string b(a.rbegin(),a.rend());	
	memset(dp,0,sizeof(dp));
	for(int i=1;i<=a.length();i++)
		for(int j=1;j<=b.length();j++)
			dp[i][j]=max(max(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1]+(a[i-1]==b[j-1]?1:0));
	cout<<a.length()-dp[a.length()][b.length()]<<endl;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章