给定一个长度为
的数组,数组中的数为整数。
请你选择一个非空连续子数组,使该子数组所有数之和尽可能大。求这个最大值。
第一行为一个正整数,代表数组的长度。
第二行为个整数
,用空格隔开,代表数组中的每一个数。
连续子数组的最大之和。
3 3 -4 5
5
选择 [5] 这个子数组即可。
3 4 -3 5
6
选择 [4,-3,5] 这个子数组。
#include <stdio.h>
int main() {
int n,max;
scanf("%d",&n);
int a[n],dp[n];
for (int i=0; i<n; i++) {
scanf("%d",&a[i]);
}
dp[0]=a[0];
max=dp[0];
for (int i=1; i<n; i++) {
dp[i]=(a[i]>(dp[i-1]+a[i])?a[i]:(dp[i-1]+a[i]));
max=(dp[i]>max?dp[i]:max);
}
printf("%d", max);
return 0;
}