/*
返回最大和
*/int
maxsum_1
(const
int a,
int n)
else
}return maxsum;
}//返回最大和,同時列印出子串行邊界
intmaxsum_2
(const
int a,
int n)
thissum +
= a[j];if
(thissum > maxsum)
else
} cout << start <<
" "<< end << endl;
return maxsum;
}
演算法思想:最大子串行和可能在三處出現:
第三種情況可以通過求前半部分的最大和(包含前半部分最後乙個元素) 以及 後半部分的最大和而得到(包含後半部分第乙個元素)
int
maxsum_3
(const
int a,
int left,
int right)
center =
(left + right)/2
;//第一種情況
maxleftsum =
maxsum_3
(a, left, center)
;//第二種情況
maxrightsum =
maxsum_3
(a, center +
1, right)
; maxleftbordersum =0;
leftbordersum =0;
//第三種情況
for(
int i = center; i >= left;
--i)
maxrightbordersum =
0; rightbordersum =0;
for(
int i = center +
1; i <= right;
++i)
return
max();
}
int
maxsum_4
(const
int a,
int n)
}return maxsum;
}
深入 最大子串行和(多種演算法)
給定乙個整數序列,a0,a1,a2,an 項可以為負數 求其中最大的子串行和。如果所有整數都是負數,那麼最大子串行和為0 例如 對於序列 2,11,4,13,5,2。所求的最大子串行和為20 從11到13,即從a1到a3 用於測試下面 的的主函式 如下 注意要更改呼叫的函式名 cpp view pl...
最大子串行和問題
問題 給定一整數序列a1,a2,an 可能有負數 求a1 an的乙個子串行ai aj,使得ai到aj的和最大 例如 整數序列 2,11,4,13,5,2,5,3,12,9的最大子串行的和為21。對於這個問題,最簡單也是最容易想到的那就是窮舉所有子串行的方法。利用三重迴圈,依次求出所有子串行的和然後取...
最大子串行和問題
問題描述 給定乙個整數序列 可能有負數 求一子串行 記為l 使得該子串行所有元素之和最大。例 給定序列 2,11,4,13,5,2,則最大子串行和為20 11,4,13 方法一 遍歷窮舉 o n 2 略方法二 分治遞迴 o n logn 思路 將輸入序列l分為左右兩個子串行l1和l2,則l 只可能以...