环状最大连续和
题目大意: 给出一个环,以及环上每一个结点的值(有正有负),求环上的最大连续和。
解题思路:先用“潜力值”方法求出该序列非环的最大连续Max和与最小连续和Min,然后求出序列中所有节点相加的和sum,rMin = sum - Min(断裂的最大连续和),然后比较Max与rMax,两者中大的值就是该环的最大连续和。
潜力值方法求最大连续和
int cnt = 0;
while (num[cnt++] < 0);
int sum = num[cnt - 1], Max = 0;
for (int i = cnt; i < n; i++) {
if (sum + num[i] < 0) {
sum = num[i];
} else {
sum += num[i];
}
if (sum > Max) Max = sum;
}
for (int i = 0; i < n; i++) {
if (Max < num[i]) Max = num[i];
}