文章

18

粉丝

0

获赞

77

访问

3.3k

头像
最大上升子序列和 题解:代码随想录的模板
P1257 北京大学机试题
发布于2026年3月17日 19:25
阅读数 94

#include<cstring>
#include<vector>
#include<algorithm>
#include<iostream>

using namespace std;

//非连续子序列求最大上升子序列和
int main(){
    int n;
    while(cin>>n){
        vector<int> nums(n),dp(n);
        for(int i=0;i<n;i++){
            cin>>nums[i];
            dp[i]=nums[i];//dp[i]的含义是以当前元素为尾巴的子序列中最大的子序列和
        }
        int res=dp[0];//初始化
        for(int i=1;i<n;i++){//遍历顺序,双重循环与之前每个元素作比较
            for(int j=0;j<i;j++){//递推公式
                if(nums[i]>nums[j]) dp[i]=max(dp[i],dp[j]+nums[i]);//自己的推导1 8 4 9  18  8 17
            }
            if(dp[i]>res) res=dp[i];//每一轮比较...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发