最大增长序列的两种算法

来源:互联网 发布:淘宝营业额 编辑:程序博客网 时间:2024/05/18 00:56

n2DP算法

#include <iostream>#include <cstdio>using namespace std;const int N=100;int a[N],dp[N];int main(){    for(int i=0 ; i<N ; ++i)    {        scanf("%d",&a[i]);    }    dp[0]=1;    int ans=0;    for(int i=1 ; i<N ; ++i)    {        int m=1;        for(int j=0 ; j<i ; ++j)        {            if(a[i]>a[j])            {                m=max(m,dp[j]+1);            }        }        dp[i]=m;        ans=max(ans,dp[i]);    }    printf("%d\n",ans);    return 0;}

nlogn二分算法

#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int N=100;int a[N],g[N];int main(){    for(int i=0 ; i<N ; ++i)    {        scanf("%d",&a[i]);    }    int cnt=0;    for(int i=0 ; i<=N ; ++i)    {        int k=lower_bound(g,g+cnt,a[i])-g;        g[k]=a[i];        cnt=max(cnt,k+1);    }    printf("%d\n",cnt);    return 0;}
0 0