暴力肯定超时,动态规划
看的luo谷老哥的解法,
从第一个元素开始,如果截至前一个元素的最大和加上该元素的值大于该元素值则将和加上该元素作为截止该元素的最大和,否则该元素值为最大和,然后比较出最大值,(比较绕,同一个意思的换了个颜色)
就是如果加上前面可以更好,就加,不然倒不如从这个开始新序列
说实话,有点难想,我这种蠢货估计还得想想才能理解
#include<bits/stdc++.h>
#define maxs 200002
using namespace std;
int main(void) {
int N;
int aa[maxs],bb[maxs];
int a,b;
int kk=-2147483647;
scanf("%d",&N);
for(int i=0; i<N; i++) {
scanf("%d",&aa[i]);
if(i==1)
bb[i]=aa[i];
else
bb[i]=max(aa[i],bb[i-1]+aa[i]);
kk=max(kk,bb[i]);
}
printf("%d",kk);
}