傳送門
description
給定乙個長度為 n
nn 的數列 a
ia_i
ai,求 a
ia_i
ai 的子串行 b
ib_i
bi 的最長長度,滿足 bi&
bi−1
≠0(2
≤i≤l
en
)b_i\&b_\ne0(2\le i\le len)
bi&bi
−1̸
=0(
2≤i≤
len)
。input
輸入檔案共 2
22 行。
第一行包括乙個整數 nnn。
第二行包括 n
nn 個整數,第 i
ii 個整數表示 a
ia_i
ai。
output
輸出檔案共一行。
包括乙個整數,表示子串行bi的最長長度。
sample input
31 2 3
sample output2
hint
n
≤100000,a
i≤2×
10
9n\le100000,a_i\le2\times10^9
n≤1000
00,a
i≤2
×109
一道比較妙的 dp 題
暴力應該是不難想的,用類似求最長上公升子串行的方法,複雜度是 n
2n^2
n2下面就說一下正解
由題中 &
\&&(與)知道這是和位運算有關的,很容易就想到在各個位上搞
首先是 &
\&& 的性質(1&1
=1,1
&0=0
,0&1
=0,0
&0=0
1\&1=1,1\&0=0,0\&1=0,0\&0=0
1&1=1,
1&0=
0,0&
1=0,
0&0=
0)記錄 f(i
)f(i)
f(i)
表示第 i
ii 位上滿足條件的最長長度,將每個數拆成二進位制,只有當前位為 1
11 時,才更新答案
具體的轉移方程就看**吧,應該不難理解
#include
#include
#include
#define n 100005
using
namespace std;
int a[n]
,f[50];
intmain()
for(i=
0;i<=30;
++i)
max=
max(max,f[i]);
printf
("%d"
,max)
;return0;
}
BZOJ4300 絕世好題
description 給定乙個長度為n的數列ai,求ai的子串行bi的最長長度,滿足bi bi 1 0 2 i len input 輸入檔案共2行。第一行包括乙個整數n。第二行包括n個整數,第i個整數表示ai。output 輸出檔案共一行。包括乙個整數,表示子串行bi的最長長度。sample in...
bzoj4300 絕世好題
絕世傻題 既然要求bi andb i 1 0,那麼就讓他一定成立咯。從1到n列舉,當前數為x,前面的數都操作完了,那麼 fx max 1,然後再更新一下gi 沒了 淦。一開始寫了發trie。寫完才發現根本不對啊tat 好虛啊老是犯這種錯 include define rep i,a,b for in...
BZOJ 4300 絕世好題
de scri ptio n 給定乙個長度為 n 的數列ai 求ai 的子串行bi 的最長長度,滿足bi bi 1 0 2 i len in put 輸入檔案共 2 行。第一行包括乙個整數n。第二行包括 n 個整數,第 i個整數表示ai out put 輸出檔案共一行。包括乙個整數,表示子串行bi ...