求連續序列的最大子串行和

2022-05-07 12:36:09 字數 1004 閱讀 7286

求乙個序列的最大子串行和,這個可以有幾種方法都可以去求解,這裡我提供兩種方法給大家。

假如這個序列是,顯然最大子串行和是7,那麼這個要怎麼去計算呢?

第一種方法就是順序求取,可以先算一下只有乙個元素的最大值是多少,再算一下連續兩個元素的最大值是多少,再算一下連續三個元素的最大值是多少 ,直到n個元素全部都取完。用乙個陣列來儲存連續乙個,連續兩個,連續n個的和的最大值,**如下。

#includeusing

namespace

std;

const

int n=-1e6+2

;int

main()

intb[n];

for(int i=0;i)

if(sum>b[i])}}

int m=b[0

];

for(int i=1;i)

}cout

}

為了提高效率,可以用兩個for就可以實現,最大值不用陣列表示,用乙個變數max1,儲存一下。

#includeconst

int n=1e6+1

;using

namespace

std;

intmain()

int max1=-n;

for(int i=0;i)}}

cout

}

最後,給大家提供一下最簡單的方法,用動態規劃就可以做,做動態規劃最重要的就是要找到狀態轉移方程,這個問題的狀態轉移方程就是

dp[i]=a[i]+dp[i-1]或者是dp[i]=a[i],**如下

#include#includeconst int n=1e6;

using namespace std;

int main()

int max1=-n;

for(int i=1;i這個只用了乙個for就可以實現了,效率相比前面幾個都提高了不少。

最大子串行和 連續

最大子串行和 連續 include using namespace std int maxsum int a,int n return sum int main 測試全是負數的用例 cout 4 cout 8 pause return 0 比如陣列 1,2,3,10,4,7,2,5 最大子串行和為1...

求序列的最大子串行

看 程式設計珠璣 一書,講解求序列的最大子串行。問題 給定乙個實數序列x1,x2,xn 不必是正數 尋找乙個連續的子串行xi,x i 1 xj,使得其數值之和在所有連續子串行數值之和中是最大的。演算法1思路 比較所有連續序列數值的和,找到最大的。1.maxsofar 0 2.for i 0,n 3....

求最大子串行和

include using namespace std int maxseqsum const int a,int n o n 2 return s2 int maxseqsum2 const int a,int n o n else if s1 0 return s2 int maxseqsum3...