标签:des style blog color java os strong io
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 135262 Accepted Submission(s): 31311
2 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5
Case 1: 14 1 4 Case 2: 7 1 6
解题思路:
当全部数都为负数时,最大子段和为0.
int MaxSum(int num[],int n)
{
int sum=0,b=0;
int i;
for (i=1;i<=n;i++)
{
if(b>0)
b+=num[i];
else
b=num[i];
if(b>sum)
sum=b;
}
return sum;
}
仅仅求最大和,没有保存位置。
保存位置:start为起 end为末
int start=1,end=1,s=1,e=1;
int sum=0,max=num[1];//不能让max=0
for(int i=1;i<=n;i++)
{
e=i;
sum=sum+num[i];
if(max<sum)
{
max=sum;
start=s;
end=e;
}
if(sum<0)
{
s=i+1;
sum=0;
}
}
本题须要保存起始位置。以下代码假设全是负数,输出最小的那个位置
代码:
#include <iostream>
using namespace std;
const int maxn=100002;
int num[maxn];
int n;
int main()
{
int t;cin>>t;int c=1;
while(t--)
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>num[i];
int start=1,end=1,s=1,e=1;//这里start end一定要赋值为1
int sum=0,max=num[1];//不能让max=0
for(int i=1;i<=n;i++)
{
e=i;
sum=sum+num[i];
if(max<sum)
{
max=sum;
start=s;
end=e;
}
if(sum<0)
{
s=i+1;
sum=0;
}
}
cout<<"Case "<<c++<<":"<<endl;
cout<<max<<" "<<start<<" "<<end<<endl;
if(t)
cout<<endl;
}
return 0;
}
[ACM] hdu 1003 Max Sum(最大子段和模型),布布扣,bubuko.com
[ACM] hdu 1003 Max Sum(最大子段和模型)
标签:des style blog color java os strong io
原文地址:http://www.cnblogs.com/hrhguanli/p/3886821.html