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]);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理