絕世好題-按位DP

來源:互聯網
上載者:User

標籤:pre   ora   它的   max   include   ace   ret   暴力   一段   

n2暴力就不講了。聽人講可以吸氧水過去。

這裡考慮怎麼最佳化這一個演算法,

其實可以發現這個題唯一的限制就是要求滿足a[i]&a[j]!=0。

那麼我們可以想到,兩個數只要有一位(二進位下)都是1,那麼就是滿足的。

所以我們對於每一個新的數,分別考慮它的二進位下的每一位,

如果那一位上是1,那麼直接 接上之前的這一位上也為1的最長一段。

那麼我們可以只存下這二進位下每一位為1時最長的值就OK了。

所以這就是按位DP??,我也不知道誒

 

#include <bits/stdc++.h>using namespace std;inline int gi () {    int x=0,w=0; char ch=0;    while (!(ch>=‘0‘ && ch<=‘9‘)) {if (ch==‘-‘) w=1; ch=getchar ();}    while (ch>=‘0‘ && ch<=‘9‘) x= (x<<3)+(x<<1)+(ch^48), ch=getchar ();    return w?-x:x;}const int N=1e5+10;int n,Ans,a[N],f[33];inline int Max (int a, int b) {return a>b?a:b;}int main (){    n=gi ();    for (int i=1;i<=n;++i) a[i]=gi ();    for (int i=1,k;i<=n;++i) {        k=1;        for (int j=0;j<=30;++j)            if ((1<<j)&a[i]) k=Max (k, f[j]+1);        for (int j=0;j<=30;++j)            if ((1<<j)&a[i]) f[j]=Max (f[j], k);        Ans=Max (Ans, k);    }    printf ("%d\n", Ans);    return 0;}

 

絕世好題-按位DP

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.