#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string.h> //poj1159 滚动数组(节省空间)
#define N 5005
using namespace std;
int dp[2][N];
char p[N], q[N];
int main()
{
int n, t, j;
scanf("%d", &n);
scanf("%s", p);
for(t=0, j=n-1; j>=0; --j, ++t)
q[t]=p[j];
for(j=1; j<=n; ++j)
{
for(t=1; t<=n; ++t)
{
if(p[j-1]==q[t-1])
dp[1][t]=dp[0][t-1]+1;
else dp[1][t]=max(dp[0][t], dp[1][t-1]);
}
for(t=1; t<=n; ++t) //将数据复制上去,节省空间
dp[0][t]=dp[1][t];
}
printf("%d\n", n-dp[1][n]);
return 0;
}
POJ 1159滚动数组
最新推荐文章于 2024-11-03 21:27:26 发布