1 solutions

  • 0
    @ 2024-3-30 19:57:29

    可以直接遍历i前面所有的数

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    #define int long long
    #define endl '\n'
    #define QAQ ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
    using namespace std;
    const int N=1e5+5;
    int a[N],dp[N];
    void solve()
    {
        int n,maxx=-1e9;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            dp[i]=1;
            for(int j=1;j<i;j++)//挨个遍历前面的数字查找
            {
                if(a[j]<=a[i])//求不下降,即>=
                    dp[i]=max(dp[i],dp[j]+1);
            }
            maxx=max(maxx,dp[i]);
        }
        cout<<maxx;
    }
    signed main()
    {
        QAQ;
        int t=1;
    //    cin>>t;
        while(t--)
            solve();
        
        
        return 0;
    }
    ​
    

    当然也可以直接二分找到前面最大的<=我们的第i个数

    #include <iostream>
    #include <cmath>
    #include <algorithm>
    #define QAQ ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    const int N=10005;
    using namespace std;
    int n,h[N],dp1[N],cnt=0;//dp1记录最后一个不下降的数,cnt记录数量
    int find(int l,int r,int x)//用二分查找从左找到dp1中第一个大于x的数
    {
        while(l<r)
        {
            int mid=(l+r)/2;
            if(dp1[mid]>x)
                r=mid;
            else
                l=mid+1;
        }
        return l;
    }
    int main(){
        QAQ;
        //求最长不下降子序列
        cin>>n;
        dp1[0]=-1e9;
        for(int i=1;i<=n;i++)
        {
            cin>>h[i];
            if(h[i]>=dp1[cnt])//如果不下降,则记录dp1;
            {
                dp1[++cnt]=h[i];
    //            cout<<cnt<<' ';
            }
            else
            {
                int j=find(1,cnt,h[i]);
                dp1[j]=h[i];
    //            cout<<j<<'|';
            }
        }
        cout<<cnt;
        return 0;
    }
    

    很显然我们第一种方法五百多ms,而第二种9ms。 (我直接copy paste的不知道什么时候写的代码())

    • 1

    Information

    ID
    1130
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    7
    Tags
    # Submissions
    24
    Accepted
    9
    Uploaded By