绝世好题bzoj4300

Posted Z-Y-Y-S

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绝世好题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 }

 

 

 

以上是关于绝世好题bzoj4300的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ-4300: 绝世好题 (递推)

bzoj 4300: 绝世好题

bzoj 4300 绝世好题

bzoj4300 绝世好题

BZOJ 4300 绝世好题(位运算)

[bzoj 4300]绝世好题