最大上升子序列

题目链接:OpenJudge - 2757:最长上升子序列

参考链接:最长上升子序列 (LIS) 详解+例题模板 (全)_lxt_Lucia的博客-CSDN博客_最长上升子序列

dp时间复杂度:O(n*n)

贪心+二分时间复杂度:O(n*logn)

贪心+二分题目:

友好城市 - 洛谷

[NOIP1999 普及组] 导弹拦截 - 洛谷

AC代码:

#include
#include
using namespace std;

const int MAXN =1005;

void Solve_dp()
{
    int n;
    int a[MAXN]={0},f[MAXN]={0};
    int ans=0;

    cin>>n;
    for(int i=1;i<=n;++i)
    {
        cin>>a[i];
    }

    for(int i=1;i<=n;++i)
    {
        f[i]=1;
        for(int j=1;ja[j]) f[i]=max(f[i],f[j]+1);
        }
        ans=max(ans,f[i]);
    }
    cout<>n;
    for(int i=0;i>a[i];
    }

    //正确版本
    dp[0]=a[0];
    for(int i=1;idp[cnt]) dp[++cnt]=a[i];
        else
        {
            dp[lower_bound(dp,dp+cnt+1,a[i])-dp]=a[i];
        }
    }
    cout<

 

你可能感兴趣的:(寒假练习,算法)