题意:求最大子序列。
明明是动态规划的题目,竟然放到这个专题。。。
动态规划的经典问题。
要使区间尽量大,这个条件没想清楚,折腾了一小时。。。
#include <cstdio>
using namespace std;
const int MAXN = 21000;
int sumSe[MAXN];
int main()
{
//freopen("input.txt", "r", stdin);
int T, i, j, n, temp, sum, maxNum, tempMin, start, target, tempStart, cases = 1;
scanf("%d", &T);
while (T--)
{
sum = 0;
scanf("%d", &n);
for (i = 1; i < n; i++)
{
scanf("%d", &temp);
sum += temp;
sumSe[i] = sum;
}
maxNum = -2147483646, tempMin = 0;
start = tempStart = target = 0;
for (i = 1; i < n; i++)
{
int t = sumSe[i] - tempMin;
if (t > maxNum || (t == maxNum && i - tempStart > target - start))
{
maxNum = t;
start = tempStart;
target = i;
}
if (sumSe[i] < tempMin)
{
tempMin = sumSe[i];
tempStart = i;
}
}
if (maxNum > 0)
printf("The nicest part of route %d is between stops %d and %d\n", cases++, ++start, ++target);
else
printf("Route %d has no nice parts\n", cases++);
}
return 0;
}