第二次遇到滚动数组,不能忽视了。。。
本题就是字符串反转比较LCS,以后还是写成函数好了。。。还有字符串反转的技巧。
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 5005;
char s1[N], s2[N];
int dp[3][N], n;
int LCS()
{
int i, j;
memset(dp, 0, sizeof(dp));
for(i = 1; i <= n; i ++)
for(j = 1; j <= n; j ++)
{
int x = i % 2;
int y = 1 - x;
if(s1[i - 1] == s2[j - 1]) dp[x][j] = dp[y][j - 1] + 1;
else dp[x][j] = max(dp[y][j], dp[x][j - 1]);
}
return n - dp[n % 2][n];
}
int main()
{
// freopen("in.txt", "r", stdin);
while(~scanf("%d", &n))
{
scanf("%s", s1);
strcpy(s2, s1);
strrev(s2);
printf("%d\n", LCS());
}
return 0;
}