罗马PK
Time Limit(Common/Java):1000MS/2000MS Memory Limit:65536KByteDescription
Input
Output
Sample Input
Sample Output
Case 1:14 1 4
Case 2:
7 1 6
题目链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2045
题目分析:求最大连续子序列和,线性扫,记录起点和终点位置。计算方法:线性加,如果累加的和小于0,起点后移
#include <cstdio>
int const MAX = 1e5 + 5;
int a[MAX];
int main()
{
int T;
scanf("%d", &T);
for(int ca = 1; ca <= T; ca++)
{
int len, right, left = 1, MaxSum = 0, CurSum = 0;
scanf("%d", &len);
for(int i = 1; i <= len; i++)
{
scanf("%d", &a[i]);
CurSum += a[i];
if(CurSum > MaxSum)
{
MaxSum = CurSum;
right = i;
}
if(CurSum < 0)
{
CurSum = 0;
left = i + 1;
}
}
printf("Case %d:\n%d %d %d\n", ca, MaxSum, left, right);
if(ca < T)
printf("\n");
}
}