您的位置:首页 > 其它

poj1159-LCS滚动数组优化。

2013-07-18 12:54 295 查看
题目连接

题意:

 回文,就是从某一个字后面一次往回走。比如abdsdba从s开始后面的字符刚好往回走了,给你一个字符串,问你要插入至少多小个字符可以补成回文。

分析:

此题就是比较两个正序和逆序的字符的最长公共子序列。由于字符串长度达5000个。开关5000*5000二维数组,是超内存。

方法就是。利用滚动数组。

#include<stdio.h>
#include<string.h>
#define max(a,b) a>b?a:b
int dp[2][5001];
int main()
{
int n,i,j;
char s[5001],t[5001];
while(scanf("%d",&n)!=EOF){
scanf("%s",s);
int ans=0;
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(s[i-1]==s[n-j])
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]);
ans=max(ans,dp[i%2][j]);
}
}
printf("%d\n",n-ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字符串 LCS