description
給定乙個長度為n的數列ai,求ai的子串行bi的最長長度,滿足bi&bi-1!=0(2<=i<=len)。
input
輸入檔案共2行。
第一行包括乙個整數n。
第二行包括n個整數,第i個整數表示ai。
output
輸出檔案共一行。
包括乙個整數,表示子串行bi的最長長度。
sample input
1 2 3
sample output
2 hint
n<=100000,ai<=2*10^9
這道題一眼看就是dp,但是普通n2的dp無法通過這道題,所以我們採用特殊的二進位制dp。
設f[i]表示每個數在二進位制下到第i位時所能獲取的最大子串行長度。(每個數的二進位制向右對齊,左邊不足的用0來補)
那麼我們很容易得出,如果數x在第i位的二進位制數字1,那麼可以滿足的最長子序列長度為w[i]+1(其中w[i]表示到第i位的最大值),我們用cnt來記錄這個值,最後又用cnt來更新w即可。
#include
using namespace std;
int i,j,k,n,m,tot,ans,w[35],cnt;
intread()
int main()
BZOJ 4300 絕世好題 dp
description now give you a number sequence ai,you need to calculate the longest length of subsequence bi,meet the requirements of bi bi 1 is not equal...
BZOJ 4300 絕世好題 Dp
time limit 1 sec memory limit 128 mb submit 2197 solved 1175 submit status discuss 給定乙個長度為n的數列ai,求ai的子串行bi的最長長度,滿足bi bi 1 0 2 i len 輸入檔案共2行。第一行包括乙個整數n...
BZOJ 4300 絕世好題 dp
dp i 表示二進位制的第i位為1時的最大值,然後從左到右dp include include include using namespace std define b i 1 i const int maxn 100009 const int n 31 int dp 40 n int main p...