題面傳送門
這道d pdp
dp還是比較水的
首先考慮設f
if_i
fi為以a
ia_i
ai結尾的最長長度,則向前迴圈列舉找到適合的轉移就可以了,時間複雜度o(n
2)
o(n^2)
o(n2
),估計80
8080
分正解也不是很難想,因為這是位運算,所以我們要找到位運算的性質,&
\&&的性質就是兩個數至少有乙個相同位置同為1
11,那麼只要列舉位置轉移就好了,設s
is_i
si為結尾的數中二進位制第i
ii位為1
11的最大值,那麼f
if_i
fi只要從i
ii二進位制位上為1
11的地方轉移就可以了。
**實現:
#include
#define max(a,b) ((a)>(b)?(a):(b))
using
namespace std;
int n,m,a,f,s[39]
,tot,pus,ans;
intmain()
f++; pus=a;
tot=0;
while
(pus)
ans=
max(ans,f);}
printf
("%d\n"
,ans)
;}
luogu P4310 絕世好題
題面傳送門 這道 dp 還是比較水的 首先考慮設 f i 為以 a i 結尾的最長長度,則向前迴圈列舉找到適合的轉移就可以了,時間複雜度 o n 2 估計 80 分 正解也不是很難想,因為這是位運算,所以我們要找到位運算的性質,的性質就是兩個數至少有乙個相同位置同為 1 那麼只要列舉位置轉移就好了,...
P4310 絕世好題
給定乙個長度為n的數列ai,求ai的子串行bi的最長長度,滿足bi bi 1 0 2 i len 輸入格式 輸入檔案共2行。第一行包括乙個整數n。第二行包括n個整數,第i個整數表示ai。輸出格式 輸出檔案共一行。包括乙個整數,表示子串行bi的最長長度。輸入樣例 1 3 1 2 3 輸出樣例 1 2 ...
P4310 絕世好題
題目描述 給定乙個長度為n的數列ai,求ai的子串行bi的最長長度,滿足bi bi 1 0 2 i len 說明對於100 的資料,1 n 100000,ai 10 9。錯誤日誌 沒搞清 每一位的dp值如何更新記錄陣列 乙個數 a 可以接在數 b 後面,當他們在二進位制下有相同位同為 1 時成立 這...