zoukankan      html  css  js  c++  java
  • 绝世好题bzoj4300

    Description

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

    Input

    输入文件共2行。
    第一行包括一个整数n。
    第二行包括n个整数,第i个整数表示ai。

    Output

    输出文件共一行。
    包括一个整数,表示子序列bi的最长长度。

    Sample Input

    3
    1 2 3

    Sample Output

    2

    HINT

    n<=100000,ai<=2*10^9

    递推

    f[x]表示相应二进制位为1时的最优解

    每一次输入一个数,二进制分解,取为1的f值的最大长度

    再将其加1,取代对应的f值

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int f[100002],x,n,ans;
     7 int main()
     8 {int i,cnt,z;
     9     cin>>n;
    10      for (i=1;i<=n;i++)
    11      {
    12         scanf("%d",&x);
    13         cnt=0,z=0;
    14         int xx=x;
    15         while (x)
    16         {
    17             cnt++;
    18             if (x%2==1)
    19             {
    20                 z=max(z,f[cnt]);
    21             }
    22             x/=2;
    23         }
    24         cnt=0;
    25          while (xx)
    26          {
    27             cnt++;
    28             if (xx%2==1)
    29             {
    30                 f[cnt]=max(f[cnt],z+1);
    31                 ans=max(ans,f[cnt]);
    32             }
    33             xx/=2;
    34          }
    35      }
    36      cout<<ans;
    37 }
  • 相关阅读:
    java作用域public ,private ,protected 及不写时的区别
    JAVA的静态变量、静态方法、静态类
    栈内存 堆内存
    java
    数组 bash shell
    SYN Cookie的原理和实现
    Python 时间 time
    sysctl命令详解
    lvs
    软件工程概论个人作业01
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7134209.html
Copyright © 2011-2022 走看看