w[i,j]代表高度j,第i颗树的时候的最大值

那么w[i,j]:=max(w[i,j+1],w[k,j+heigh])+sum[i,j];

但是这样枚举是n^3的,我们发现转移的第二个选择w[k,j+heigh]与当前

第I颗树没有关系,所以记录一个高度为H的时候时的最大值直接O(1)转移就行了

我也不知道咋回事儿,pascal一直RE,一年前能A的代码现在还是RE,然后向管理员

联系了下,他们说数据没有问题,还把数据发过来了,一共5个点,最后一个点的in竟然

30MB。。。,挂接都挂不了。。。

/**************************************************************
    Problem: 1270
    User: BLADEVIL
    Language: Pascal
    Result: Runtime_Error
****************************************************************/
 
//By  BLADEVIL
var
    n, h, d                     :longint;
    tree                        :array[0..2010,0..2010] of longint;
    w                           :array[0..4010,0..4010] of longint;
    p                           :array[0..10010] of longint;
    i, j                        :longint;
    k                           :longint;
    ans                         :longint;
     
function max(a,b:longint):longint;
begin
    if a>b then max:=a else max:=b;
end;
     
begin
    readln(n,h,d);
    for i:=1 to n do
    begin
        read(tree[i,0]);
        for j:=1 to tree[i,0] do
        begin
            read(k);
            inc(tree[i,k]);
        end;
    end;
    for j:=h downto 1 do
        for i:=1 to n do
        begin
            w[i,j]:=w[i,j+1]+tree[i,j];
            if j+d<=h then w[i,j]:=max(w[i,j],p[j+d]+tree[i,j]);
            p[j]:=max(p[j],w[i,j]); 
        end;
    ans:=-maxlongint;
    for i:=1 to n do ans:=max(ans,w[i,1]);
    writeln(ans);
end.

 

相关文章:

  • 2021-12-29
  • 2021-09-30
  • 2022-01-12
  • 2021-05-25
  • 2021-10-23
  • 2022-02-08
  • 2021-05-26
  • 2021-12-07
猜你喜欢
  • 2022-12-23
  • 2021-04-23
  • 2021-05-19
  • 2022-12-23
  • 2021-09-29
  • 2021-08-11
相关资源
相似解决方案