zoukankan      html  css  js  c++  java
  • 【模板】求最长不下降序列 [动态规划 LIs]

    求最长不下降序列

    看不出来哪里还错了.....

    d[i]以i为结尾的最长上升子序列的长度     g[i]表示d值为i的最小状态的编号即长度为i的上升子序列的最小末尾值(d[j]=i的j值最小)

     liurujia's

    for(int i=1;i<=n;++i) g[i]=inf;
    for(int i=1;i<=n;++i){
        int k=lower_buond(g+1,g+1+n,a[i])-g;
        d[i]=k;
        g[k]=a[i];
    }

     二昏好难啊.....

    贴上90昏代码....

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    #define Max(x,y) (x)>(y)?(x):(y)
    #define Min(x,y) (x)>(y)?(y):(x)
    #define ll long long
    #define rg register
    const int N=200+5,M=200000+5,inf=0x3f3f3f3f,P=99999997;
    int n,a[N],g[N],ans=0;
    template <class t>void rd(t &x){
        x=0;int w=0;char ch=0;
        while(!isdigit(ch)) w|=ch=='-',ch=getchar();
        while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
        x=w?-x:x;
    }
    
    int main(){
    //    freopen("in.txt","r",stdin);
        rd(n); 
        for(int i=1;i<=n;++i) rd(a[i]);
        memset(g,inf,sizeof(g));
        for(int i=1;i<=n;++i){
            int k=lower_bound(g+1,g+1+n,a[i])-g;
            g[k]=a[i];
            ans=max(ans,k);
        }
        printf("max=%d
    ",ans);
        for(int i=1;i<=ans;++i) printf("%d ",g[i]);
        return 0;
    }
     
  • 相关阅读:
    PowerDesigner11.0的SQL生成表,写列描述出错
    centos中crontab(计时器)用法详解
    5.14
    4.13
    5.15
    监听服务启动失败
    4.24
    Enjoy 4.26
    4.14
    export
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/11180028.html
Copyright © 2011-2022 走看看