給定乙個整型陣列a,計算最大連續子段和。
例子:輸入:(2, -8, 3, -2, 4, -10)
輸出:5連續子段為(3, -2, 4)
思路:典型的動態規劃問題。對於dp,我們要先找到狀態,然後再找到遞推關係。定義d[i]為以a[i]結尾的最大連續子段和,那麼遞推關係為:如果d[i - 1] > 0,d[i] = d[i - 1] + a[i];否則d[i] = a[i]。最後的結果為max。我們注意到遞推式中d[i]只與d[i - 1]有關係,所以可以將o(n)的空間降為o(1)。
#include #include using namespace std;
int maxsum(const vector& ivec, bool& check)
check = true;
int res = int_min;
int sum = ivec[0];
for (int i = 1; i < ivec.size(); ++i)
return res;
}int main()
bool check;
int res = maxsum(ivec, check);
if (check)
cout << res << endl;
else
cout << "invalid" << endl;
} return 0;
}
最大連續子段和
最大連續子段和 給定長度為n的整數序列,a 1.n 求 1,n 某個子區間 i,j 使得a i a j 和最大,或者求出最大的這個和。例如 2,11,4,13,5,2 的最大子段和為20,所求子區間為 2,4 窮舉法 3次for迴圈 第1次for迴圈,遍歷陣列所有數字,即確定子段和的首個數字 第2次...
DP 最大連續子段和
最大連續子段和 hdu 1003 1.問題描述 給定一串整數,例如 6 1 5 4 7,求最大連續子段和?2.演算法介紹 此題不能暴力,o n 2 的時間複雜度必然超時。考慮如下演算法 設mi表示前i個整數包含第i個整數的最大連續子段和。sum i,j 表示第i個整數到第j個整數的和,最大連續子段和...
總結 最大連續子段和
給你乙個序列,讓你在其中找一段連續的子串行,使得這個連續的子串行的和是最大的。它實際上有點動態規劃的意思在裡面,設f i 表示以第i個數字作為結尾的連續子串行的和的最大可能值。則 f i max f i 1 a i a i 這裡的 f i 1 a i 實際上表示的就是,讓a i 和以a i 1 結尾...