题意:
在一个整数序列中,找出不相互覆盖的两段,且非空。
使得这两段里面所有数的和最大。
思路:
假设下标从1开始。
L是从1到i最大的连续和,R是从n到i最大的连续和。
ans=max{L[i]+R[i+1],1<=i<n}
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
rep(i, 1, n) scanf("%d", a+i);
dp[0][1] = a[1];
rep(i, 2, n) dp[0][i] = max (a[i], dp[0][i-1] + a[i]);
dp[1][n] = a[n];
urep(i, n-1, 1) dp[1][i] = max (a[i], dp[1][i+1] + a[i]);
L[1] = a[1];rep(i, 2, n) L[i] = max (L[i-1], dp[0][i]);
R[n] = a[n];urep(i, n-1, 1) R[i] = max (R[i+1], dp[1][i]);
int ans = -inf;
rep(i, 1, n-1) ans = max (ans, L[i]+R[i+1]);
printf("%d\n", ans);
}