题解 | #最大上升子序列和#

最大上升子序列和

https://www.nowcoder.com/practice/dcb97b18715141599b64dbdb8cdea3bd

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;cin>>n;
    int arr[n],dp[n];
    for(int i =0;i<n;i++)
        dp[i]=0;
    for(int i =0;i<n;i++)
        cin>>arr[i];
    dp[0] = arr[0];
    for(int i =1;i<n;i++){
        //找他之前的元素,找到比他小且dp最大的值
        int maxDp=-1;
        bool isFind=false;
        for(int j=0;j<i;j++)
            if(dp[j]>maxDp&&arr[j]<arr[i]){
                maxDp=dp[j];
                isFind=true;
            }   
        //加上该元素
        if(isFind)dp[i] = arr[i]+maxDp;
        else dp[i]=arr[i];
    }
    cout<<*max_element(dp,dp+n);
}
// 64 位输出请用 printf("%lld")

二重for循环,O(n^2)

全部评论

相关推荐

11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务