pat 7-1 Maximum Subsequence Sum

题目描述

解题思路

这是一道很简单的dp题,dp数组dp[i]代表以j结尾的连续序列的最大和,则有dp[i]=dpi-1,dp[i]=nums[i]+dpi-1,再判断一下全负的特殊情况即可。
代码:

#include<iostream>
#include<stdio.h>
using namespace std;
int K;
int* nums;

int main(){
    bool is_negative=true;
    scanf("%d", &K);
    nums=(int*)malloc(K*sizeof(int));
    for(int i=0;i<K;i++){
        cin>>nums[i];
    }
    for(int j=0;j<K;j++){
        if(nums[j]>=0){
            is_negative=false;
            break;
        }
    }
    if(is_negative){
        printf("%d %d %d",0,nums[0],nums[K-1]);
        return 0;
    }
    int* dp=(int *)malloc(K*sizeof(int));
    int* dp_pos=(int *)malloc(K*sizeof(int));
    dp_pos[0]=0;
    dp[0]=nums[0];
    for(int i=1;i<K;i++){
        if(dp[i-1]<0){
            dp[i]=nums[i];
            dp_pos[i]=i;
        }else{
            dp[i]=dp[i-1]+nums[i];
            dp_pos[i]=dp_pos[i-1];
        }
    }
    int max_sum=-1000;
    int max_pos=0;
    for(int k=0;k<K;k++){
        if(max_sum<dp[k]){
            max_sum=dp[k];
            max_pos=k;
        }
    }
    printf("%d %d %d",dp[max_pos],nums[dp_pos[max_pos]],nums[max_pos]);
}
posted @   lh123cha  阅读(37)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
主题色彩