基本同RQNOJ的POWER.
见我写的解题报告:http://www.cnblogs.com/exponent/archive/2011/08/08/2130723.html
code:
const oo=1000000000000000; var f:array[0..1010,0..1010,0..1] of int64; g:array[0..1010,0..1010] of longint; d:array[0..1010] of longint; n,i,j,l,p:longint; flag:boolean; procedure sort(l,r:longint); var i,j,mid,temp:longint; begin i:=l; j:=r; mid:=d[(l+r)>>1]; while i<=j do begin while d[i]<mid do inc(i); while d[j]>mid do dec(j); if i<=j then begin temp:=d[i]; d[i]:=d[j]; d[j]:=temp; inc(i); dec(j); end; end; if i<r then sort(i,r); if j>l then sort(l,j); end; function min(a,b:int64):int64; begin if a>b then exit(b); exit(a) end; begin readln(n,l); flag:=true; for i:=1 to n do begin readln(d[i]); if d[i]=l then flag:=false; end; if flag then begin inc(n); d[n]:=l; end; sort(1,n); for i:=1 to n do if d[i]=l then begin p:=i; break; end; for i:=1 to n do for j:=i to n do begin g[i,j]:=n-(j-i+1); if ((p<i)or(p>j))and(flag) then dec(g[i,j]); end; for i:=0 to 1010 do for j:=0 to 1010 do begin f[i,j,0]:=oo; f[i,j,1]:=oo; end; f[p,p,0]:=0; f[p,p,1]:=0; for j:=p to n do for i:=j-1 downto 1 do begin f[i,j,0]:=min(f[i+1,j,0]+g[i+1,j]*(d[i+1]-d[i]), f[i+1,j,1]+g[i+1,j]*(d[j]-d[i])); f[i,j,1]:=min(f[i,j-1,0]+g[i,j-1]*(d[j]-d[i]), f[i,j-1,1]+g[i,j-1]*(d[j]-d[j-1])); end; writeln(min(f[1,n,0],f[1,n,1])); end.