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

     

    4300: 绝世好题

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 2012  Solved: 1061
    [Submit][Status][Discuss]

    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

     PS:今天做了个绝世好题,晚上加鸡腿?

    思路:2个数要&为0,说明他们都二进制所有位置中,至少有一个为0,我们用dp[i]表示当前这个数二进制的第i位形成的最长序列

       如果当前这个数与(1<<j)&为1,说明这个数可以与前面的dp[j]为放在一个序列中,然后这个数的的二进制位置为1的位置赋值与以这个点为结束的最大序列

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 
     5 ll a[100005];
     6 int dp[50];
     7 
     8 int main(){
     9     int n;
    10     scanf("%d",&n);
    11     for(int i=1;i<=n;i++){
    12         scanf("%lld",&a[i]);
    13     }
    14     int Max=0;
    15     for(int i=1;i<=n;i++){
    16         int tmp=0;
    17         for(int j=0;j<=31;j++){
    18             if(a[i]&((1LL)<<j))
    19                 tmp=max(tmp,dp[j]+1);
    20         }
    21         for(int j=0;j<=31;j++){
    22             if(a[i]&((1LL)<<j))
    23                 dp[j]=tmp;
    24 
    25         }
    26         Max=max(Max,tmp);
    27     }
    28     cout<<Max<<endl;
    29 }

       

  • 相关阅读:
    Mysql:用户操作命令
    Cookie和Set-Cookie
    Matcher中appendReplacement()方法与replaceAll()方法的联系
    记录一次mysql执行异常(磁盘空间)
    ehcache简单配置
    md5
    mysql后台运行简单的备份脚本
    shell脚本研习
    SpringBoot根据条件,去注入需要的Bean
    springboot后台跨域设置
  • 原文地址:https://www.cnblogs.com/hhxj/p/7263376.html
Copyright © 2011-2022 走看看