//刚开始编译错误可是在dev是正确的
//原因是导入了cmath文件而不是algorithm
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 100010;
int main(){
int T;
cin>>T;
int count=0;//样例个数
while(T--){
count++;
int dp[maxn],a[maxn];
int N,i;
cin>>N;
for(i=1;i<=N;i++)
cin>>a[i];//输入数字
dp[1]=a[1];
for(i=2;i<=N;i++)
dp[i]=max(a[i],a[i]+dp[i-1]);
//下面这一步是找到最大的dp[i]
int k=1;//k始终代表最大数的下标
for(i=1;i<=N;i++){
if(dp[i]>dp[k])
k=i;
}
int max=dp[k];
int end=k;//子序列的结束下标
//下面开始找开始下标
int sum=0;
int begin;
for(i=end;i>=1;i--){
sum+=a[i];
if(sum==max)
begin=i;
}//找到开始下标
cout<<"Case "<<count<<":"<<endl;
cout<<max<<" "<<begin<<" "<<end<<endl;
if(T)
cout<<endl;
}
return 0;
}
杭电oj1003 寻找最大子序列
猜你喜欢
转载自blog.csdn.net/weixin_45191675/article/details/104693242
今日推荐
周排行