bzoj1046: [HAOI2007]上升序列

    xiaoxiao2021-03-25  122

    传送门 首先我们可以倒着做一次最长下降序列,记录以x结尾的最长下降序列的长度。 然后反过来,我们就有了以x开头的最长上升序列的长度。 我们正着推过去,可以知到当长度大于x是这个点可选,此时长度-1,输出答案。 有点说不清楚,没看懂的请转弯

    var a,f:array [0..10005] of longint; n,i,j,max,m,l,last:longint; begin read(n); for i:=1 to n do read(a[i]); for i:=1 to n do f[i]:=1; for i:=n-1 downto 1 do for j:=i+1 to n do if (a[i]<a[j]) and (f[i]<f[j]+1) then f[i]:=f[j]+1; max:=0; for i:=1 to n do if (f[i]>max) then max:=f[i]; read(m); for i:=1 to m do begin read(l); if (l>max) then begin writeln('Impossible'); continue; end; last:=0; for j:=1 to n do if (f[j]>=l) and (a[j]>last) then begin write(a[j]); if (l<>1) then write(' '); last:=a[j]; dec(l); if (l=0) then break; end; writeln; end; end.
    转载请注明原文地址: https://ju.6miu.com/read-3360.html

    最新回复(0)