这道动态规划和我前几天做的括号序列基本一个思路,都是明显的线性结构,状态转移是十分简单的。但问题是这回规模不小……于是,我傻乎乎地开了个5000*5000的数组MLE,想到了滚动数组之后又做了无数次多余的取模运算TLE……哎…… program palindrome; var f:array[0..5005,0..2] of longint; st:ansistring; i,j,k,n,a,b,c:longint; begin assign(input,'a.in'); reset(input); assign(output,'a.out'); rewrite(output); readln(n); readln(st); a:=(-1) mod 3; b:=(-2) mod 3; for k:=1 to n-1 do begin c:=b; b:=a; a:=k mod 3; j:=k; for i:=1 to n-k do begin inc(j); if st[i]=st[j] then f[i,a]:=f[i+1,c] else if f[i,b]<f[i+1,b] then f[i,a]:=f[i,b]+1 else f[i,a]:=f[i+1,b]+1; end; end; writeln(f[1,a]); close(input); close(output); end.