问题描述:Problem-1003:Max Sum
本题用暴力解法时间复杂度高达O(n^3),会超时,因此找一种合适的方法来简化问题;
最优子序列是个序列,那么必然含有起始位置和终止位置,我们以每个a[i]作为研究对象,研究以i为终止位置的最优子序列,得出唯一确定的以a[i]为结尾的最优子序列,每个a[i]有一个以他为结尾的最优子序列,再便利所有的最优子序列,找出最优子序列里的最优为最终结果;
本题对最优的定义是和数最大(Max Sum);定义数组a[]用来接收一组测试用例的所有数字;我们定义结构体数组dp[],dp[i]用来记录以a[i]为结尾的最大子序列的信息,dp[i].x用来记录最大子序列起始位置,dp[i].val用来记录最大子序列的和。
易知:dp[0].val=a[0],dp[0].x=0(以a[0]为结尾的序列只有一个,即a[0]本身,因此dp[0]记录的是序列(a[0])的和and位置);
通过dp[0]推导dp[1]、dp[2]、dp[3]、、、、、、dp[n-1];
推导思路:重点:dp[0]是以a[0]为结尾的最大子序列的一个记录,dp[1]必然含有a[1](因为dp[i]本身的含义是以a[i]为结尾的最大子序列,不含a[1]就不是以a[i]为结尾的序列了),dp[2]必然含有a[2]、、、、、、
首先,推dp[1],已知dp[0]是以a[0]为结尾的最大子序列,将dp[0]链接a[1],求dp[1],这个如何思考呢;