BZOJ4300 绝世好题(动态规划)
生活随笔
收集整理的這篇文章主要介紹了
BZOJ4300 绝世好题(动态规划)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
設(shè)f[i][j]為前i個(gè)數(shù)中所選擇的最后一個(gè)數(shù)在第j位上為1時(shí)的最長(zhǎng)序列長(zhǎng)度,轉(zhuǎn)移顯然。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int read() {int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } #define N 100010 int n,a[N],f[N][31]; int main() { #ifndef ONLINE_JUDGEfreopen("bzoj4300.in","r",stdin);freopen("bzoj4300.out","w",stdout);const char LL[]="%I64d\n"; #elseconst char LL[]="%lld\n"; #endifn=read();for (int i=1;i<=n;i++) a[i]=read();for (int i=1;i<=n;i++){int x=0;for (int j=30;~j;j--) f[i][j]=f[i-1][j];for (int j=30;~j;j--) if (a[i]&(1<<j)) x=max(x,f[i][j]);for (int j=30;~j;j--) if (a[i]&(1<<j)) f[i][j]=x+1;}int ans=0;for (int i=0;i<=30;i++) ans=max(ans,f[n][i]);cout<<ans;return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/Gloid/p/9840998.html
總結(jié)
以上是生活随笔為你收集整理的BZOJ4300 绝世好题(动态规划)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 谜题36:优柔寡断
- 下一篇: Sitecore® 8.2 Profes