首先O(N^2)的DP挺好想的.
f[i,j]=sum[i,j]-min(f[i+1,j],f[i,j-1]).
但题目把n出到5000,内存卡到64M,二维的状态存不下..
其实,j这一维可以省掉.我们换个状态表示
f[i,i+len]=sum[i,i+len]-min(f[i+1,i+len],f[i,i+len-1])
然后循环这样写:
for len=1 to n
for i=1 to n-len.
容易看出第二维可以省掉了.
code:
/**************************************************************
Problem: 2101
User: exponent
Language: Pascal
Result: Accepted
Time:332 ms
Memory:264 kb
****************************************************************/
var s,f:array[0..5001] of longint;
n,i,l,num:longint;
function min(a,b:longint):longint;
begin
if a>b then exit(b); exit(a);
end;
begin
readln(n);
for i:=1 to n do
begin
read(num);
s[i]:=s[i-1]+num;
f[i]:=num;
end;
for l:=1 to n-1 do
for i:=1 to n-l do
f[i]:=s[i+l]-s[i-1]-min(f[i],f[i+1]);
writeln(f[1]);
end.