DP经典问题——最大子段和

本文介绍了如何使用动态规划方法求解最大子段和问题,以序列2, -1, 3, -5, 3为例,阐述了状态转移方程的设计过程,并提供了相应的算法分析及源代码。" 122533241,2068,Windows环境下编译与运行OpenDDS3.19实战,"['OpenDDS', 'Windows开发', 'DDS', '编译教程', '分布式系统']
摘要由CSDN通过智能技术生成

1.问题描述:

最大子段和是一个经典的DP问题。
比如给定一个序列: 2, -1 , 3 , -5 , 3
可以推测出最大子段和为 2 - 1 + 3 = 4
题目要求输入一段序列,输出最大的子段和。

2.算法分析:

什么是子段和?
就是在整个序列的子区间中最大的和。
我们首先要找到这个问题的状态转移方程。
如何设计状态?
我们可以发现一个问题,我们可以将每一个子区间的和算出来。
比如我们使用dp[i] 表示 从1 - i的子段和。
那么状态 i 该怎么来。
可以发现它可以合并之前的dp[i - 1],也可以重新开始作为区间的起始端点。
所以可以写出状态转移方程:
dp[i] = max(dp[i - 1] + a[i],a[i])
dp[i - 1] + a[i] 代表的是合并进入区间
a[i]代表结束之前的区间,另起炉灶。
DP的关键就是寻找状态转移方程,如何设计状态,如何设计转移。
本人也刚入门,大家一起学习。

3.源代码:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值