您的位置:首页 > 其它

hdu_1513_Palindrome(LCS+滚动数组)

2016-05-06 22:47 218 查看

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1513

题意:给你一个字符串,问你最少插入多少个字符使其为回文字符。

题解:将字符串倒着保存,然后求一下原串和该串的最长公共子序列,然后字符串长度剪LCS就是答案

#include<cstdio>
#define FFC(i,a,b) for(int i=a;i<=b;i++)
int n,dp[2][5010];
char a[5010],b[5010];
void fuck(){
FFC(i,0,n)dp[0][i]=0,dp[1][i]=0;
FFC(i,1,n)FFC(j,1,n)
if(a[i]==b[j])dp[i%2][j]=dp[(i-1)%2][j-1]+1;
else dp[i%2][j]=dp[(i-1)%2][j]>dp[i%2][j-1]?dp[(i-1)%2][j]:dp[i%2][j-1];
}
int main(){
while(~scanf("%d",&n)){
scanf("%s",a+1);
for(int i=1,j=n;i<=n;i++,j--)b[j]=a[i];
fuck();
printf("%d\n",n-dp[n%2]
);
}
return 0;
}
View Code

 



 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: