UVa 108
From Algorithmist
Contents |
[edit] 108 - Maximum Sum
[edit] Summary
Given an n by n two-dimensional array arr (1 < = n < = 100) of arbitrary integers, find the maximum sub-array. Maximum sub-array is defined to be the sub-array whose sum of integer elements are the maximum possible.
[edit] Explanation
- First, calculate the vertical prefix sum for all columns (an O(n2) algorithm).
- Second, assume that the maximum sub-array will be between row a and row b, inclusive. There are only O(n2) a, b pairs such that a < b. Try each of them.
- Since we already have the vertical prefix sum for all columns, the sum of elements in arr[a..b][c] for column c can be computed in O(1) time. This allows us to imagine each column sum as if it is a single element of a one-dimensional array across all columns (one dimensional array with one row and n columns).
- There's an O(n) algorithm to compute the maximum sub-array for a one-dimensional array, known as Kadane's Algorithm.
- Applying the Kadane's algorithm inside each a and b combination gives the total complexity of O(n3).
[edit] Notes
An O(n4) algorithm can get an AC on UVa Online Judge. But anything above that won't.
[edit] Input
4 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 5 1 -61 5126 612 6 41 6 7 2 -7 1 73 -62 678 1 7 -616136 61 -83 724 -151 6247 872 2517 8135 4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2
[edit] Output
-1 18589 15

