题解 | #最长上升子序列(一)#

最长上升子序列(一)

https://www.nowcoder.com/practice/5f65ccbb025240bd8458eb6479c2612e

//简单的dp
/*
记dp[i]为以arr[i]为结束的最长的子串长度
那么:
dp[i+1] = while(arr[k]<arr[i+1]):max(dp[k0]、dp[k1].....dp[ki]) + 1 //加上自己
最后求最大的dp即可
*/
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n,arri;
    vector<int>arr;
    cin>>n;
    if(n==0){
        cout<<0;
        return 0;
    }
    for(int i=0;i<n;++i){
        cin>>arri;
        arr.push_back(arri);
    }
    vector<int> dp(n,1);
    int top=arr[0];
    int res = 1;
    for(int j=0;j<n-1;++j){
        for(int k=0;k<j+1;++k){
            if(arr[k]<arr[j+1])dp[j+1] = max(dp[j+1],dp[k]+1);
        }
        res = max(dp[j+1],res);
    }
    cout<<res;
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

今天 15:09
已编辑
上海大学 Java
忙碌的芝士选钝角:招侦探?
点赞 评论 收藏
分享
吴offer选手:学到了,下次面试也放张纸在电脑上,不然老是忘记要说哪几个点
点赞 评论 收藏
分享
求offer的大角牛:不吃香菜
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务