P4310-绝世好题【位运算,dp】
生活随笔
收集整理的這篇文章主要介紹了
P4310-绝世好题【位运算,dp】
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
正題
題目鏈接:https://www.luogu.org/problem/P4310
題目大意
一個(gè)長(zhǎng)度為nnn的序列,求一個(gè)最長(zhǎng)的子序列使得每個(gè)數(shù)&\&&前一個(gè)數(shù)不為0。
解題思路
因?yàn)槭?span id="ozvdkddzhkzd" class="katex--inline">&\&&不為0,所以只要有一位都為1即可。
用fif_ifi?表示以第iii個(gè)結(jié)尾的最長(zhǎng)子序列長(zhǎng)度,然后ziz_izi?表示枚舉到現(xiàn)在為止第iii位為111的最大的fif_ifi?。然后枚舉位數(shù)即可。
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=101000; int n,f[N],z[35],ans; int main() {scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);for(int j=0;j<=30;j++)if(x&(1<<j)) f[i]=max(f[i],z[j]+1);for(int j=0;j<=30;j++)if(x&(1<<j)) z[j]=max(z[j],f[i]);ans=max(ans,f[i]);}printf("%d",ans); }總結(jié)
以上是生活随笔為你收集整理的P4310-绝世好题【位运算,dp】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 辨别路由器的性能好坏路由器怎么区分性能好
- 下一篇: jzoj3888-正确答案【字符串has