您的位置:首页 > 其它

HDU 1513 最长公共子序列拓展DP

2014-04-26 15:47 507 查看
将原字符串倒置,然后与原字符串求最长公共子序列,

ans=n-dp

。 用滚动数组

#include "stdio.h"
#include "string.h"
#include "math.h"

int n;
char str[5010],str1[5010];
int dp[2][5010];
int find()
{
int i,j,a;
memset(dp,0,sizeof(dp));

for (i=1;i<=n;i++)
{
a=i%2;
for (j=1;j<=n;j++)
{
if (str[i-1]==str1[j-1])
dp[a][j]=dp[1-a][j-1]+1;
else
{
if (dp[1-a][j]>dp[a][j-1])
dp[a][j]=dp[1-a][j];
else
dp[a][j]=dp[a][j-1];
}
}
}
return dp[n%2]
;
}

int main()
{
while (scanf("%d",&n)!=EOF)
{
getchar();
gets(str);
strcpy(str1,str);
strrev(str1);
printf("%d\n",n-find());
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: