HDU 1003 Max sum
这是一道典型 的动态规划的题目,意思是让求一段序列中连续子序列的最大和,并输出起始位置和终止位置
//============================================================================
// Name : HDU.cpp
// Author : sunyanfei
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cstdio>
using namespace std;
int sequence[100010];
int N;
int main()
{
int T,i,j;
scanf("%d",&T);
int cases=0;
while(T--)
{
cases++;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&sequence[i]);
}
int start;
int end;
long long maxsum=-9999999;
for(j=1;j<=N;j++)
{
long long sum=0;
int st=j;
int endll;
while(sum>=0)
{
sum+=sequence[j];
endll=j;
if(sum>maxsum)
{
maxsum=sum;
start=st;
end=endll;
}
j++;
if(j>N)break;
}
j--;
}
printf("Case %d:\n",cases);
cout<<maxsum<<" "<<start<<" "<<end<<endl;
if(T!=0){printf("\n");}
}
return 0;
}
posted on 2011-07-16 08:43 lonelycatcher 阅读(196) 评论(0) 编辑 收藏 举报