题目地址
点击打开链接
贴代码,需要一个临时存储最大值的,一个最终存储最大值的。遍历所有的情况,复杂度线性。动态规划的思想
#include <iostream>
#include <iomanip>
#include<queue>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip>
#include<string.h>
#include<sstream>
#include<string>
//定义函数段
#define repf(i,a,b) for(int i =(a);i<(b);i++)
using namespace std;
typedef long long ll ;
const int MAX = 100001;
int l , MOD;
int main() {
int res,resend,resbegin,sum,startp,endp,num,test_num, a[MAX];
//resend,resbeigin存放最终结果 startp和endp存放临时结果
cin >> num ;
repf(j,0,num)
{
cin>>test_num;
repf(i,0,test_num)
{
cin>>a[i];
}
startp = endp = resend =resbegin = 0;
sum = a[0];
res = a[0];
repf(i,1,test_num)
{
if(sum+a[i]<a[i])
{
sum=a[i];
startp = i;
endp = i ;
}else {
sum+=a[i];
endp++;
}
if(sum>res)
{
res = sum ;
resend = endp;
resbegin = startp;
}
}
cout << "Case "<< j+1<<":"<<endl;
cout << res <<" "<<resbegin+1 << " "<<resend+1<<endl;
if(j!=num-1)
cout <<endl;
}
return 0;
}