题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003
题目大意:最大子段和问题
//C++代码
#include<iostream>
using namespace std;
int main(){
int T,n,a,i,j;
cin>>T;
for(i=1;i<=T;i++){
cin>>n>>a;
int sum,left,right,s,l,r;
sum=s=a;
left=right=l=r=1;
for(j=2;j<=n;j++){
cin>>a;
if(s<0){
if(a>s){
s=a,l=r=j;
if(s>sum) sum=s,left=right=j;
}
}
else{
if(s+a>=0){
s+=a,r=j;
if(s>sum) sum=s,left=l,right=r;
}
else s=a,l=r=j;
}
}
if(i!=1) cout<<endl;
cout<<"Case "<<i<<":"<<endl;
cout<<sum<<" "<<left<<" "<<right<<endl;
}
return 0;
}
本文针对最大子段和问题,提供了一种有效的C++实现方案。通过输入一系列整数,程序能够找到具有最大和的连续子数组及其起始和结束位置。此问题常见于编程竞赛,对于理解动态规划等算法概念具有一定的帮助。

被折叠的 条评论
为什么被折叠?



