基本同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.