33,311
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
int a[100001];
int b[100001];
int main(void)
{
int t, n, m, i, j, max, start, end;
scanf("%d", &t);
for(m = 1; m <= t; m ++)
{
scanf("%d", &n);
for(i = 1; i <= n; i ++)
{
scanf("%d", &a[i]);
b[i] = a[i];
}
max = a[1];
start = 1;
end = 1;
for(i = 2; i <= n; i ++)
{
if(b[i - 1] > 0)
b[i] += b[i - 1];
if(b[i] > max)
{
max = b[i];
end = i;
}
}
for(j = end; j > 0; j --)
if(b[j] < 0)
{
start += j;
break;
}
printf("Case %d:\n", m);
printf("%d %d %d\n", max, start, end);
if(m < t)
printf("\n");
}
system("pause");
return 0;
}
int Kadane(const int array[], size_t length, unsigned int& left, unsigned int& right)
{
unsigned int i, cur_left, cur_right;
int cur_max, max;
cur_max = max = left = right = cur_left = cur_right = 0;
for(i = 0; i < length; ++i)
{
cur_max += array[i];
if(cur_max > 0)
{
cur_right = i;
if(max < cur_max)
{
max = cur_max;
left = cur_left;
right = cur_right;
}
}
else
{
cur_max = 0;
cur_left = cur_right = i + 1;
}
}
return max;
}