1 #include<iostream>
2 #include <stdio.h>
3 using namespace std;
4
5 //最直接的方法
6 int MaxSum(int* A, int n) {
7 int maximum = 0xffffffff;
8 int sum;
9 for(int i = 0; i<n;i++) {
10
11 for(int j = i; j < n; j++){
12 sum = 0;
13 for(int k = i; k <=j; k++) {
14 sum += A[k];
15 }
16 if(sum > maximum)
17 maximum = sum;
18 }
19 }
20 return maximum;
21 }
22
23 //二分法递归
24
25 int BinarySum(int* A, int beg, int end) {
26 if(beg == end)
27 return A[beg];
28 int mid = (beg + end) / 2;
29 int leftSum = BinarySum(A, beg, mid);
30 int rightSum = BinarySum(A, mid+1, end);
31
32 int midSum = A[mid+1];
33 int sum = A[mid+1];
34 for(int i = mid+2; i <= end; i++ ) {
35 sum += A[i];
36 if(midSum < sum)
37 midSum = sum;
38 }
39 midSum += A[mid];
40 sum = midSum;
41 for(i = mid-1; i>= beg; i--){
42 sum += A[i];
43 if(midSum < sum)
44 midSum = sum;
45 }
46 return ( leftSum>rightSum?leftSum:rightSum ) > midSum ? ( leftSum>rightSum?leftSum:rightSum ):midSum;
47
48 }
49
50 int main() {
51 int nums[2] = {1, 5};
52 //动态规划
53 int maxSum = nums[0];
54 int partSum = nums[0];
55 for(int i = 1; i < 2; i++) {
56 if(partSum < 0)
57 partSum = 0;
58
59 partSum += nums[i];
60
61 if(partSum > maxSum)
62 maxSum = partSum;
63 }
64 cout << maxSum << endl;
65
66 cout << MaxSum(nums, 2)<<endl;
67
68 cout << BinarySum(nums, 0, 1) << endl;
69 return 0;
70 }