51nod 1092(lcs)回文字符串
题目:给你一个字符串,问添加最少的字符数目,使之成为回文串
解题思路:将字符串倒置,求出字符串和倒置串的最长公共子序列,字符串的长度减去lcs的长度就是了。。
代码:#include<iostream>
#include<algorithm>
#include<cstring>
#define maxn 1005
using namespace std;
int dp[maxn][maxn];
char a[maxn];
char b[maxn];
int main()
{
int n,m,i,j;
int t;
cin>>a;
n=strlen(a);
t=n-1;
for(i=0;i<n;i++)
{
b[t]=a[i];
t--;
}
//cout<<b<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(a[i-1]==b[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
cout<<n-dp[n][n]<<endl;
}