使用滚动数组
题目:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1159
#define max 5002
#define MAX(x,y) (x > y ? x : y)
//滚动数组
short g[2][max];
char sa[max];
char sb[max];
int main()
{
//freopen("in.txt","r",stdin);
int i,j,n;
while(scanf("%d%s",&n,sa + 1) != EOF){
memset(g,0,sizeof(g));
for(i=1;i<=n;i++)
sb[i]=sa[n+1-i];
sb[i]='/0';
for(i = 1;i <= n;i++)
for(j = 1;j <= n;j++)
if(sa[i] == sb[j])
g[i % 2][j] = g[(i - 1) % 2][j] + 1;
else
g[i % 2][j] = MAX(g[(i - 1) % 2][j],g[i % 2][j - 1]);
printf("%d/n",n - g[n % 2][n]);
}
return 0;
}