
题目大意:最大和子序列问题。由于具有最大和的子序列具有一下性质:第一项不为负数,并且从第一项开始累加,中间不会有和出现负数,因为一旦有负数我们可以抛弃前边的部分以得到更大的子序列和,这将会产生矛盾。
#include <cstdio> int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int T;
scanf("%d", &T);
for (int kase = ; kase <= T; kase++)
{
int n;
scanf("%d", &n);
int x, sum = , nicest = , len = ;
int p = , s, e;
for (int i = ; i < n-; i++)
{
scanf("%d", &x);
sum += x;
if (sum < )
{
sum = ;
p = i + ;
}
else if (sum > nicest || (sum == nicest && i-p+ > len))
{
s = p;
e = i;
len = i - p + ;
nicest = sum;
}
}
if (nicest > ) printf("The nicest part of route %d is between stops %d and %d\n", kase, s+, e+);
else printf("Route %d has no nice parts\n", kase);
}
return ;
}