首页 > 其他 > 详细

BZOJ4300绝世好(傻)题

时间:2017-01-06 18:41:45      阅读:257      评论:0      收藏:0      [点我收藏+]

给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len)。

 

题解:

当要求以ai结尾的最长b串时,ai可以接在所有满足(j<i)与(ai and aj>0)的aj上。

假设aj and(1 shl x)>0,则所有满足(j<i)与(ai and(1 shl x)>0)的ai都可以接上。

则只需要用F[x]记录以满足ai and(1 shl x)>0的ai结尾的b串的最大长度,进行DP时,将ai转为二进制,通过对应的F[x]转移得到,在转移到对应的F[x]上。

 

代码:

uses math;
var
  i,j,k,l,n,m,ans:longint;
  a:array[0..32]of longint;
  x,y:int64;
begin
  readln(n);
  for i:=1 to n do
  begin
    read(x); y:=x; k:=0; l:=1;
    while x>0 do
    begin
      if x and 1=1 then k:=max(a[l]+1,k);
      inc(l); x:=x div 2;
    end;
    ans:=max(ans,k); l:=1;
    while y>0 do
    begin
      if y and 1=1 then a[l]:=max(a[l],k);
      inc(l); y:=y div 2;
    end;
  end;
  writeln(ans);
end.

BZOJ4300绝世好(傻)题

原文:http://www.cnblogs.com/GhostReach/p/6257045.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!