diff --git a/HDOJ/1003_XXXX.cpp b/HDOJ/1003_XXXX.cpp new file mode 100644 index 0000000..5f6de0f --- /dev/null +++ b/HDOJ/1003_XXXX.cpp @@ -0,0 +1,50 @@ +#include +using namespace std; +#define MAXN 100005 + +typedef struct{ int s, l, r; }Sum; + +Sum MaxSub(int a[], int n); + +int main(void) +{ + int ar[MAXN], c, n, i, j; + Sum x = {0, 0, 0}; + scanf("%d", &c); + for(i = 1; i <= c; i++) + { + scanf("%d", &n); + for(j = 1; j <= n; j++) + scanf("%d", &ar[j]); + x = MaxSub(ar, n); + printf("Case %d:\n%d %d %d", i,x.s, x.l, x.r); + if(i != c) printf("\n\n"); + else printf("\n"); + } +} + +Sum MaxSub(int a[], int n) +{ + int i, s = 0, l = 1, r = 1, b; + Sum sum = {a[1], 0, 0}; + for(i = 1; i <= n; i++) + { + if(s >= 0) + { + s += a[i]; + if(a[i] > 0) r = i; + } + else + { + s = a[i]; + r = l = i; + } + if(s >= sum.s) + { + sum.s = s; + sum.l = l; + sum.r = r; + } + } + return sum; +}