动态规划--最长连续子序列

最长连续子序列

题一

hduoj 1003 Max Sum
题目大意:
求最长连续子序列,序列的起始下标和结束下标(从1开始)。

这是一道经典DP(动态规划题目)

若想找到n个数的最大子段和,那么要找到n-1个数的最大子段和,这就出来了。

我们用 b [ i ] b[i] b[i]来表示 a [ 0 ] . . . a [ i ] a[0]...a[i] a[0]...a[i]的最大子段和, b [ i ] b[i] b[i]无非有两种情况:

(1)最大子段一直连续到 a [ i ] a[i] a[i]

(2)以 a [ i ] a[i] a[i]为首的新的子段。

由此我们可以得到 b [ i ] b[i] b[i]的状态转移方程: b [ i ] = m a x { b [ i − 1 ] + a [ i ] , a [ i ] } b[i]=max\{b[i-1]+a[i],a[i]\} b[i]=max{ b[i1]+a[i],a[i]}

最终我们得到的最大子段和为 m a x { b [ i ] , 0 &lt; = i &lt; n } max\{b[i], 0&lt;=i&lt;n\} max{ b[i],0<=i<n}

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 100010;
int a[maxn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值