使用滚动数组 题目: http://acm.pku.edu.cn/JudgeOnline/problem?id=1159 #include <stdio.h> #include <string.h> #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; }