標簽:進制 好題 span 一個 int ++ pac 個數 scanf
令 \(dp_i\) 表示數列到目前爲止最後一項第 \(i\) 位爲 \(1\) 的最大子序列长度,每读入一個数时就大力转移。一個数可以被它所有的二進制位的 \(dp\) 值转移,然后把它转移到它的所有二進制位的 \(dp\) 值上。
複雜度 \(O(n\log_2n)\)。
#include<bits/stdc++.f>
using namespace std;
int f[32];
int main() {
int n;
scanf("%d",&n);
int ans=0;
for(int i=1,x; i<=n; i++) {
scanf("%d",&x);
int k=1;
for(int j=0; j<=30; j++) {
if((1<<j)&x) {
k=max(f[j]+1,k);
}
}
for(int j=0; j<=30; j++) {
if((1<<j)&x) {
f[j]=max(f[j],k);
}
}
ans=max(ans,k);
}
printf("%d",ans);
return 0;
}
题解 P4310 【绝世好題】 - wbyyui 的博客 - 洛谷博客
標簽:進制 好題 span 一個 int ++ pac 個數 scanf
原文地址:https://www.cnblogs.com/Sam2007/p/15024293.html