DP–最大子段和
题目描述
给出一个长度为 nn 的序列 aa,选出其中连续且非空的一段使得这段和最大。
输入格式
第一行是一个整数,表示序列的长度 n。
第二行有 n 个整数,第 i 个整数表示序列的第 i 个数字 ai .
输出格式
输出一行一个整数表示答案。
输入输出样例
输入
7
2 -4 3 -1 2 -4 3
输出
4
算法思路
通过题意,我们可以了解到:
f[i]=max(f[i-1]+n[i],n[i])
但是!
f[n]的值并不一定是最终结果
比如这个输入:
5 233 233 -666 1 1
如果直接输出f[n]的值,结果会是2,但是答案应该为466!
为什么?
因为若f[i]的值为负数,则f[i+1]的值就是n[i],而n[i]的值不一定比前面的最大字段和数大!
(或者n[i]为负数,则f[i]小于f[i-1]!)
所以,我们还要再用一个数从1到n再查找一次,才能找出最大数!!!
#include<bits/stdc++.h>
using<