luogu P4310 絕世好題

2021-10-04 04:37:10 字數 774 閱讀 9987

題面傳送門

這道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 時成立 這...