Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 15836 | Accepted: 6644 |
Description
Input
Output
Sample Input
5
-5 9 -5 11 20
0
Sample Output
40
Source
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int const MAX = 100000 + 5; int r[MAX], l[MAX], num[MAX]; int main() { int n, ans; while(scanf("%d", &n) != EOF && n) { ans = 0; memset(r, 0, sizeof(r)); memset(l, 0, sizeof(l)); memset(num, 0, sizeof(num)); for(int i = 1; i <= n; i++) scanf("%d", &num[i]); if(n == 2) { printf("%d\n", num[1] + num[2]); continue; } for(int i = 1; i <= n; i++) { if(l[i - 1] > 0) l[i] = l[i - 1] + num[i]; else l[i] = num[i]; } for(int i = 1; i < n; i++) if(l[i] > l[i + 1]) l[i + 1] = l[i]; for(int i = n; i > 0; i--) { if(r[i + 1] > 0) r[i] = r[i + 1] + num[i]; else r[i] = num[i]; } for(int i = n; i > 0; i--) if(r[i] < r[i + 1]) r[i] = r[i + 1]; for(int i = 1; i <= n; i++) ans = max(ans, l[i] + r[i + 1]); printf("%d\n", ans); } }
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int const MAX = 100000 + 5; int r[MAX], l[MAX], num[MAX]; int main() { int t, n, ans; scanf("%d", &t); while(t--) { scanf("%d", &n); ans = 0; memset(r, 0, sizeof(r)); memset(l, 0, sizeof(l)); memset(num, 0, sizeof(num)); for(int i = 1; i <= n; i++) scanf("%d", &num[i]); if(n == 2) { printf("%d\n", num[1] + num[2]); continue; } for(int i = 1; i <= n; i++) { if(l[i - 1] > 0) l[i] = l[i - 1] + num[i]; else l[i] = num[i]; } for(int i = 1; i < n; i++) if(l[i] > l[i + 1]) l[i + 1] = l[i]; for(int i = n; i > 0; i--) { if(r[i + 1] > 0) r[i] = r[i + 1] + num[i]; else r[i] = num[i]; } for(int i = n; i > 0; i--) if(r[i] < r[i + 1]) r[i] = r[i + 1]; for(int i = 1; i <= n; i++) ans = max(ans, l[i] + r[i + 1]); printf("%d\n", ans); } }
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int const MAX = 50005; int const INF = -2147483640; int a[MAX], dp[2][MAX]; int main() { int T; scanf("%d", &T); while(T--) { int n; memset(dp, 0, sizeof(dp)); scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", &a[i]); int cur = 0, ma = INF; for(int i = 0; i < n; i++) { cur += a[i]; ma = max(cur, ma); if(cur < 0) cur = 0; dp[0][i] = ma; } cur = 0, ma = INF; for(int i = n - 1; i >= 0; i--) { cur += a[i]; ma = max(cur, ma); if(cur < 0) cur = 0; dp[1][i] = ma; } int ans = INF; for(int i = 0; i < n - 1; i++) ans = max(ans, dp[0][i] + dp[1][i + 1]); printf("%d\n", ans); } }