⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ac1229.pas

📁 同济大学 Online在线题库 AC源代码合集 程序设计竞赛必看资料
💻 PAS
字号:
program tju1229;
const
  max=100;
var
  area:array[1..max,1..max]of real;
  best:array[boolean,1..max,1..max]of real;
  m0,n0,l,m,n,i,j,x,y:byte;
  k1,k2,b,t:real;
  b1,b2:boolean;
begin
  repeat
    read(k1,k2,m0,n0);
    if (max mod n0=0) and (n0 mod m0=0) then begin
      writeln(sqr(max div m0)*k1*m0+sqr(max div n0)*k2*n0:0:1);
      continue;
    end;

    for l:=1 to max do
      for n:=1 to n0 do
        if n>l then
          area[l,n]:=9e9
        else
          area[l,n]:=sqr(l)*k1+(sqr(l div n)*(n-l mod n)+sqr(l div n+1)*(l mod n))*k2;

    best[true]:=area;
    for m:=2 to m0 do begin
      b1:=odd(m);b2:=not b1;
      for l:=1 to max do
        for n:=1 to n0 do
          best[b1,l,n]:=9e9;
      for l:=m to max do
        for n:=m to n0 do begin
          y:=1;
          for i:=1 to l-m+1 do begin
            b:=9e9;
            for j:=y to n-m+1 do begin
              t:=best[b2,l-i,n-j]+area[i,j];
              if t>b then break;
              b:=t;x:=j;
            end;
            if b<best[b1,l,n] then best[b1,l,n]:=b;y:=x;
          end;
        end;
    end;
    writeln(best[odd(m0),max,n0]:0:1);
  until seekeof;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -