您的位置:首页 > 大数据 > 人工智能

UVa 507 - Jill Rides Again

2013-08-18 14:16 471 查看
  题目大意:最大和子序列问题。由于具有最大和的子序列具有一下性质:第一项不为负数,并且从第一项开始累加,中间不会有和出现负数,因为一旦有负数我们可以抛弃前边的部分以得到更大的子序列和,这将会产生矛盾。

#include <cstdio>

int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int T;
scanf("%d", &T);
for (int kase = 1; kase <= T; kase++)
{
int n;
scanf("%d", &n);
int x, sum = 0, nicest = 0, len = 0;
int p = 0, s, e;
for (int i = 0; i < n-1; i++)
{
scanf("%d", &x);
sum += x;
if (sum < 0)
{
sum = 0;
p = i + 1;
}
else if (sum > nicest || (sum == nicest && i-p+1  > len))
{
s = p;
e = i;
len = i - p + 1;
nicest = sum;
}
}
if (nicest > 0)   printf("The nicest part of route %d is between stops %d and %d\n", kase, s+1, e+2);
else   printf("Route %d has no nice parts\n", kase);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: