分而治之的思想(divide and conquer)
#includeusing namespace std;
int max(int a,int b)
int maxsum(int *a,int low,int high)
#includeusing namespace std;
int max(int a,int b)
int maxsum(int *a,int size)
return nall;
}int main()
; int b[6]=;
int c[5]=;
cout<>i;
return 0;
}
動態規劃版:
擴充套件問題1
當陣列首尾相連時,求子陣列之和的最大值
這時需解可能跨越a[0]與a[n-1]的情況,可以分兩段計算
以a[0]開始的陣列的最大值(a[0],a[1],...a[i])
以a[n]結尾的子陣列的最大值(a[j],a[j+1],...a[n-1])
若i則含有a[0]與a[n-1]的最大值為
a[0]+a[1]+...+a[i]+(a[j]+...a[n-1]
若i>j
如陣列中無負數
則含有a[0]與a[n-1]的最大值為
整個陣列的和
否則需用整個陣列的和減去子陣列之和的最小值(子陣列之和為負)
a[0]+a[1]+..a[n-1]-min(子陣列之和)
#includeusing namespace std;
int max(int x,int y)
int min(int x,int y)
int maxsum(int *a,int n)
start_sum=a[0];
start_index=0;
temp_sum=start_sum;
for(j=1;j=0;k--)
if(negall<0)
if(nstart>nall)
} return nall;
}
int main()
; int b[6]=;
int c[5]=;
cout<
程式設計之美2 14 求子陣列之和的最大值
問題描述 乙個有n個整數元素的一維陣列 a 0 a n 1 這個陣列當然有很多子陣列,那麼子陣列之和的最大值是多少呢?思路一 最直接能想到的方法就是列舉,暴力解法,複雜度為o n 2 思路二 遞迴解法,將陣列分成長度相等的兩段陣列,分別為a 0 a n 2 1 和a n 2 a n 1 分別求出最大...
2 14 求子陣列之和的最大值
include using namespace std int maxsum int src,int n,int spos,int epos else if start all return all int max int a,int b,int c else void toneg int src,...
程式設計之美2 14 求陣列的子陣列之和的最大值
問題描述 乙個有n個整數元素的一維陣列 a 0 a 1 a n 1 它包含很多子陣列,求子陣列之和的最大值,當陣列元素全部為負的時候,有兩種處理辦法,第一種是返回0,第二種是返回陣列中最大的負數。解法1 使用暴力法,假設最大的一段陣列為a i a j 則對i 0 n 1 j i n 1,遍歷一遍,求...