比赛 NOIP2008集训模拟3 评测结果 C
题目名称 工作分配 最终得分 0
用户昵称 SMXX 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2008-11-12 11:26:17
显示代码纯文本
program df;
var
a:array[1..100000]of longint;
f:array[1..100000,1..100000]of longint;
m:array[1..100000,0..1]of longint;
n,k,c,w,i,j,g,h:longint;
procedure qsort(g,h:longint);
var
n,m,u,x:longint;
begin
n:=g;m:=h;u:=a[(n+m)div 2] ;
repeat
while a[n]<u do inc(n);
while a[m]>u do dec(m);
if n<=m then begin
  x:=a[n];
  a[n]:=a[m];
  a[m]:=x; inc(n);dec(m);
  end;
until n>m;
if n<h then qsort(n,h);
if m>g then qsort(g,m);
end;
begin
readln(n,k,c);
for i:=1to n do read(a[i]);
qsort(1,n);
for i:= 1 to n div k do f[1,i]:=c;
for i:= 1to n do f[i,1]:=c+(a[i]-a[1])*(a[i]-a[i]);
for i:= 1to n do begin m[i,1]:=-1;m[i,0]:=-1;end;
for i:= 1 to n do begin
  for j:= 1 to n div k-1 do begin
    for h:= 1to j do begin

    w:=100000000;
       if (m[h,0]>0)and(m[h,1]>0) then
     if (a[i]>m[h,0])and(a[i]<m[h,1])then  w:=0
                                     else begin
        if (a[i]>m[h,1])and((a[i]-m[h,0])*(a[i]-m[h,0])-(m[h,1]-m[h,0])*(m[h,1]-m[h,0])<w)then begin
                                 w:=(a[i]-m[h,0])*(a[i]-m[h,0])-(m[h,1]-m[h,0])*(m[h,1]-m[h,0]);  g:=h ;end;
        if (a[i]<m[h,0])and((m[h,1]-a[i])*(m[h,1]-a[i])-(m[h,1]-m[h,0])*(m[h,1]-m[h,0])<w) then begin g:=h;
                                 W:=(m[h,1]-a[i])*(m[h,1]-a[i])-(m[h,1]-m[h,0])*(m[h,1]-m[h,0]);end;
                                     end;
    if w<>0 then begin if a[i]>m[g,1] then m[g,1]:=a[i];
                       if a[i]<m[g,0] then m[g,0]:=a[i];
                       end;
   f[i,j]:=f[i-1,j]+w;
   if f[i,j]>F[i-1,j-1]+c then begin m[j,1]:=a[i];m[j,0]:=a[i];end;
   end;
   end;
 end;
 end.













end.