Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

我觉得这题的正解应该是topsort+dp,绝对的O(mn)...数据再大也不怕...只要能读入。附code

Posted by edward2 at 2009-07-12 20:51:07 on Problem 1088
...不好意思...只会pascal
const
  px:array [1..4] of longint=(1,-1,0,0);
  py:array [1..4] of longint=(0,0,1,-1);
var
  m,n:longint;
  h:array [1..100,1..100] of longint;
  list,d,tl,f:array [1..10000] of longint;
  a:array [1..10000,0..4] of longint;

function flag(x,y:longint):boolean;
begin
  if (x<1) or (x>m) or (y<1) or (y>n) then flag:=false
                                      else flag:=true;
end;

procedure init;
var
  i,j,k,temp:longint;
begin
  readln(m,n);
  for i:=1 to m do
    for j:=1 to n do read(h[i,j]);
  for i:=1 to m do
    for j:=1 to n do
      for k:=1 to 4 do
        if flag(i+px[k],j+py[k]) and (h[i+px[k],j+py[k]]<h[i,j]) then
          begin
            temp:=(i-1)*n+j;
            inc(a[temp,0]);
            a[temp,a[temp,0]]:=(i+px[k]-1)*n+j+py[k];
            inc(d[(i+px[k]-1)*n+j+py[k]]);
          end;
  n:=m*n;
end;

procedure topsort;
var
  i,head,pt,tail:longint;
begin
  pt:=0; tail:=0; head:=0;
  for i:=1 to n do
    if d[i]=0 then
      begin
        inc(tail);
        tl[tail]:=i;
      end;
  while pt<n do
    begin
      inc(head);
      inc(pt);
      list[pt]:=tl[head];
      for i:=1 to a[tl[head],0] do
        begin
          dec(d[a[tl[head],i]]);
          if d[a[tl[head],i]]=0 then
            begin
              inc(tail);
              tl[tail]:=a[tl[head],i];
            end;
        end;
    end;
end;

procedure dp;
var
  i,j,k,ans:longint;
begin
  ans:=0;
  for i:=1 to n do f[i]:=1;
  for i:=1 to n do
    begin
      for j:=1 to a[list[i],0] do
        begin
          k:=a[list[i],j];
          if f[k]<f[list[i]]+1 then f[k]:=f[list[i]]+1;
        end;
      if f[list[i]]>ans then ans:=f[list[i]];
    end;
  writeln(ans);
end;

begin
  init;
  topsort;
  dp;
end.


Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator