求乙個序列的最大子串行和,這個可以有幾種方法都可以去求解,這裡我提供兩種方法給大家。
假如這個序列是,顯然最大子串行和是7,那麼這個要怎麼去計算呢?
第一種方法就是順序求取,可以先算一下只有乙個元素的最大值是多少,再算一下連續兩個元素的最大值是多少,再算一下連續三個元素的最大值是多少 ,直到n個元素全部都取完。用乙個陣列來儲存連續乙個,連續兩個,連續n個的和的最大值,**如下。
#includeusingnamespace
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,儲存一下。
#includeconstint 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...