最长连续子序列
题一
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[i−1]+a[i],a[i]}
最终我们得到的最大子段和为 m a x { b [ i ] , 0 < = i < n } max\{b[i], 0<=i<n\} max{ b[i],0<=i<n}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 100010;
int a[maxn