For example:
int array[] = {1, -2, -3, 4, 5, 7, -6}
The max subsquence sum is 4+5+7= 16 and start index is at 3 and end index is at 5.
思路:DP,用一个int maxsofar记录当前最大和,对每个元素记录包含此元素的最大和cursum,同时更新maxsofar,这样做一遍就行了。
- //assume n>0
- int maxsubsum(int A[], int n){
- int maxsofar = A[0], cursum = A[0];
- for(int i = 1; i < n; i++){
- cursum = A[i] + max(cursum, 0);
- maxsofar = max(maxsofar, cursum);
- }
- return maxsofar;
- }
No comments:
Post a Comment