zoukankan      html  css  js  c++  java
  • BZOJ 4300: 绝世好题( dp )

    dp(i)表示二进制的第i位为1时的最大值, 然后从左到右dp

    ------------------------------------------------------------------------

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
     
    using namespace std;
     
    #define b(i) (1 << (i))
     
    const int maxn = 100009;
    const int n = 31;
     
    int dp[40], N;
     
    int main() {
    memset(dp, 0, sizeof dp);
    scanf("%d", &N);
    for(int i = 0; i < N; i++) {
    int t = 0, a;
    scanf("%d", &a);
    for(int j = 0; j < n; j++)
    if(b(j) & a) t = max(t, dp[j]);
    t++;
    for(int j = 0; j < n; j++)
    if(b(j) & a) dp[j] = max(dp[j], t);
    }
    printf("%d ", *max_element(dp, dp + 40));
    return 0;
    }

    ------------------------------------------------------------------------

    4300: 绝世好题

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 274  Solved: 168
    [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

    对于100%的数据,1<=n<=100000,ai<=10^9。


    Source

  • 相关阅读:
    vue-resource请求
    vue的生命周期
    Swift-多类型封装
    Swift
    Swift-structures 和 classes 初始化
    iOS-延时加载,延时初始化
    Swift-Closures
    WKWebView-填坑总结
    存档&&解档游戏状态
    循环引用 && weak strong
  • 原文地址:https://www.cnblogs.com/JSZX11556/p/4902301.html
Copyright © 2011-2022 走看看