PTA甲级 Maximum Subsequence Sum(最大子序列和)

本文介绍了如何使用动态规划和贪心算法解决最大子序列和问题。通过分析题目链接中的问题,提出了两种思路:贪心算法每次计算是否使结果增大并更新子序列,以及动态规划通过集合维护以每个数结尾的最大子序列和。文章还提醒了在实现过程中需要注意的坑点,并提供了AC代码供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805514284679168
在这里插入图片描述
dp+贪心
贪心思路:

  1. 每次计算加上当前q[i],如果使得res变大,就将i放到子序列里
  2. 同时维护一个f[i],如果加上当前q[i]使得f[i]变为负值,说明当前q[i]+f[i-1]是负收益,就舍弃,并从新开始计算

dp思路

  1. 集合:f[i]代表以q[i]结尾最大的子序列的和
  2. 属性:MAX
  3. 状态转移:上一个状态肯定是f[i-1],根据贪心思路,如果会使得res变大则将i加入到子序列中即:f[i] = max(f[i-1]+q[i], q[i]),否则就舍弃,开始从q[i]计算一个新的子序列和

坑点:

  1. 无非是,res<0时 begin = 1,end = n

AC代码:

#include <iostream>
#inclu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1bu3dong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值