给定一个长度为 的数组,数组中的数为整数。
请你选择一个非空连续子数组,使该子数组所有数之和尽可能大,子数组最小长度为1。求这个最大值。
第一行为一个正整数 ,代表数组的长度。第二行为 个整数 ,用空格隔开,代表数组中的每一个数。
连续子数组的最大之和。
8 1 -2 3 10 -4 7 2 -5
18
经分析可知,输入数组的子数组[3,10,-4,7,2]可以求得最大和为18
1 2
2
1 -10
-10
#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; }