题目:点击打开链接
分析:LCS+滚动数组 字符串长度—LCS==需要增加的字符个数
滚动数组:优化空间,压缩存储,主要用于递推或动态规划中。
#include<stdio.h>
#include<string.h>
#define max(a,b) (a>b?a:b)
char str1[5010],str2[5010];
int dp[2][5015];//!!!动态数组
int main()
{
int n;
while(~scanf("%d",&n))
{
int i,j,k;
memset(dp,0,sizeof(dp));
getchar();
scanf("%s",str1);//!!!按字符串输入
for(i=0;i<n;i++)
{
str2[n-i-1]=str1[i];
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(str1[i-1]==str2[j-1])
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]);
}
printf("%d\n",n-dp[n%2][n]);
}
return 0;
}