Chủ Nhật, 24 tháng 4, 2022

TOWER1035 PASCAL


const   fin = 'tower1035.inp';   fon = 'tower1035.out';
        maxn=105;vc=maxlongint;
type    Da = record
        a,b,g: longint;
        end;
var     d:array[0..maxn] of da;
        f,t:array[0..maxn] of longint;
        n:longint;

procedure nhap;
var i,x,y:longint;
begin
	read(n);
	for i:=1 to n do
   	begin
   		read(x,y,d[i].g);
   		if x<y then
                begin
                        d[i].a:=x;d[i].b:=y;
                end
   		else
                begin
                        d[i].a:=y;d[i].b:=x;
                end;
   	end;
end;

function dt(x: da): longint;
begin
        exit(x.a*x.b);
end;

procedure qs(l,h:longint);
   var i,j:longint;
      m,t:da;
   begin
   m:=d[(l+h) div 2];
   i:=l;j:=h;
   repeat
      while dt(d[i])>dt(m) do inc(i);
      while dt(d[j])<dt(m) do dec(j);
      if i<=j then
         begin
         t:=d[i]; d[i]:=d[j];  d[j]:=t;
         inc(i); dec(j);
         end;
   until i>j;
   if L<j then qs(L,j);
   if i<H then qs(i,H);
   end;


procedure xuli;
var
   i,jmax,j,max:longint;
   kq:array[1..maxn] of longint;
begin
	qs(1,n);
	//for i:=1 to n do write(dt(d[i]),' ');
        f[0]:=0;
	f[1]:=d[1].g;
	for i:=2 to n do
   	begin
   	        jmax:=0;
   		for j:=1 to i-1 do
      		        if (d[j].a>=d[i].a) and (d[j].b>=d[i].b) and (f[j]>f[jmax]) then
                                jmax:=j;
                f[i]:=f[jmax]+d[i].g;
   	end;
        max:=0;
        for i:=1 to n do
                if f[i]>max then max:=f[i];
        write(max);
end;

begin
assign(input,fin);reset(input);
assign(output,fon);rewrite(output);
nhap;
xuli;
close(input);close(output);
END.

Không có nhận xét nào:

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.