BZOJ4300絕世好題(DP)

2021-08-15 14:46:29 字數 675 閱讀 6239

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...