最大字段和
任务描述
对于给定序列a1,a2,a3……an,寻找它的某个连续子段,使得其和最大。如( -2,11,-4,13,-5,-2 )最大子段是{ 11,-4,13 }其和为20。
相关知识
动态规划
输入格式
第一行输入一个n,代表有n个数
下面一行输入n个数,代表序列
0<n<100
序列中的数的范围为[-2000,2000]
输出格式
输出一个数,代表最大字段和。
输入
6 -2 11 -4 13 -5 -2
输出
20
输出
20
代码
/* 1 2 3 4 5 6
num-2 11 -4 13 -5 -2
b 1 2 2 3 4 5 上一个的下标
s -2 11 7 20 15 13 最大总和
*/
#include<stdio.h>
int num[4000];
int s[4000];
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
}
s[0]=num[0];
for(int i=1;i<n;i++){//每个数本身与本身加上前面数的最大总和比较得出自己的最大总和
s[i]=num[i];
if(s[i-1]+s[i]>s[i]) s[i]=s[i]+s[i-