bzoj4300: 绝世好题(DP)

Posted Sakits

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj4300: 绝世好题(DP)相关的知识,希望对你有一定的参考价值。

  按位DP f[i]表示第i位为1的最长子序列

技术分享
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio> 
#include<algorithm>
#define ll long long 
using namespace std;
int n,x,ans,mx;
int f[31];
void read(int &k)
{
    int f=1;k=0;char c=getchar();
    while(c<0||c>9)c==-&&(f=-1),c=getchar();
    while(c<=9&&c>=0)k=k*10+c-0,c=getchar();
    k*=f;
}
int main()
{
    read(n);
    for(int i=1;i<=n;i++)
    {
        read(x);mx=0;
        for(int j=0;j<=30;j++)
        if(x&(1<<j))mx=max(mx,f[j]+1);
        for(int j=0;j<=30;j++)
        if(x&(1<<j))f[j]=max(f[j],mx);
        ans=max(ans,mx);
    }
    printf("%d\n",ans);
    return 0;
}
View Code

 

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

bzoj4300 绝世好题(位运算+DP)

bzoj4300绝世好题

BZOJ 4300: 绝世好题

bzoj 4300 绝世好题 —— 思路

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

bzoj 4300: 绝世好题