很多人说是动态规划,我又不知道我用的是什么算法,只是数据结构课本上有这个算法,就记了下来,算法挺经典的
代码如下:
//要注意本题可能全为负数,所以要将MaxSum初始为一个很小的负数,这一点让我wa了好几遍,注意
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#define Max 1000005
using namespace std;
int main(){
int N;
int n,temp;
int ThisSum,MaxSum;
scanf("%d",&N);
while(N--){
scanf("%d",&n);
ThisSum=0;
MaxSum=-65535;
for(int i=0;i<n;i++){
scanf("%d",&temp);
ThisSum+=temp;//向右累加
if(ThisSum>MaxSum)
MaxSum=ThisSum;//如果有更大的和则更新最大和
else if(ThisSum<0)
ThisSum=0;//若当前的和为负数则不可能使后面的和增大,所以重置为0
}
printf("%d\n",MaxSum);
}
return 0;
}