最长下降子序列


这个题和最长上升子序列都是一个类型的题

题意是求一个序列的最长上升子序列的长度

输入数据是:

2
8
100 287 155 300 299 178 158 65
3
88 23 65

输出是:

5
2

是序列dp的入门题

代码:

#include <iostream>
#include <cstring>
using namespace std;
int dp[1010];
int nums[1010];
int main(){
    int n;
    cin>>n;
    while(n--){
        int m;
        cin>>m;
        for(int i=1;i<=m;i++){
            cin>>nums[i];
        }
        int res=0;
        for(int i=1;i<=m;i++){
            dp[i]=1;
            for(int j=1;j<i;j++){
                if(nums[i]<nums[j]){
                    dp[i]=max(dp[i],dp[j]+1);
                }
            }
            res=max(res,dp[i]);
        }
        cout<<res<<endl;
    }
}

这个题好像有个二分的做法可以把时间复杂度降到nlog(n)的时间复杂度(有时间写一下)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM