[bzoj4300] 绝世好题 动态规划

同O(n log2n)Lis的思想,保存更新二进制每一位的可进行更新的最大值

/**************************************************************
    Problem: 4300
    User: Gobegobe
    Language: C++
    Result: Accepted
    Time:188 ms
    Memory:1288 kb
****************************************************************/

#include
using namespace std;
int f[35];
int main()
{
    int n , x , ans = 0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        int temp = 0;
        for(int j=0;j<=30;j++)
            if(x & (1<
                temp = max(temp , f[j]+1);
        for(int j=0;j<=30;j++)
            if(x & (1<
                f[j] = max(f[j] , temp);
    }
    for(int i=0;i<32;i++) ans = max(ans , f[i]);
    cout<
    return 0;
}

你可能感兴趣的:(动态规划---,子序列类dp)