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

    Bzoj 4300: 绝世好题 (DP)

    实在是无语了,不知道怎么DP的就过了...
    还是在吃饭的时候猛地想起来状态的缺失.
    然后A了???
    真奇怪.
    设状态(f[i][j])表示前i位二进制为(j)的最大长度.
    当第i位的二进制(j)位出现了(1)时,长度+1.
    但是缺少了一步就是.
    只考虑了第(j)位,
    其实在所有为1的二进制中取max,才是当前位置的最大状态.
    好好领悟一下...

    #include <iostream>
    #include <cstdio>
    using namespace std;
    const int maxN = 100000 + 7;
    
    int f[maxN][50];
    int a[maxN];
    int ans;
    
    int main() {
        int n,ans = 0;
        scanf("%d",&n);
        for(int i = 1;i <= n;++ i) 
            scanf("%d",&a[i]);
        for(int i = 1;i <= n;++ i) {
            int res = 0;
            for(int j = 0;j <= 32;++ j) {
                f[i][j] = f[i - 1][j];
                if(a[i] & (1 << j)) {
                    f[i][j] ++;
                    res = max(f[i][j],res);
                }
            }
            for(int j = 0;j <= 32;++ j) {
                f[i][j] = f[i - 1][j];
                if(a[i] & (1 << j)) {
                    f[i][j] = res;
                }
            }
            ans = max(ans,res);
        }
        printf("%d
    ", ans);
        return 0;
    }
    
    
  • 相关阅读:
    BIO与NIO、AIO的区别
    Java虚拟机
    PV模型
    HashMap、HashSet源代码分析其 Hash 存储机制
    单节点到分布式集群
    Oracle表分区
    ZooKeeper原理
    oracle中的 exists 和 in 的效率问题
    OQL对象查询语言
    keepalived openssl 报错
  • 原文地址:https://www.cnblogs.com/tpgzy/p/9754484.html
Copyright © 2011-2022 走看看