和最大子串行 動態規劃

2021-07-02 19:50:27 字數 784 閱讀 8508

問題描述

對於乙個給定的長度為n的整數序列a,它的「子串行」的定義是:a中非空的一段連續的元素(整數)。你要完成的任務是,在所有可能的子串行中,找到乙個子串行,該子串行中所有元素的和是最大的(跟其他所有子串行相比)。程式要求你輸出這個最大值。

輸入格式

輸入檔案的第一行包含乙個整數n,第二行包含n個整數,表示a。 其中

1 <= n <= 100000

-10000 <= a[i] <=  10000

輸出格式

輸出僅包含乙個整數,表示你算出的答案。

樣例輸入

53 -2 3 -5 4

樣例輸出

4這題我覺得有兩種解法, 一種是模擬+貪心,一種是動態規劃,

對於第一種,我認為**量比較大,所以我選擇第二種方法來解決這題

其實這題的狀態轉移方程很好確定,就是d[i] = max(d[i - 1] + a[i], 0);

d[i]代表第i個位置最大連續子串行的和,a[i]代表第i個位置的值

一層迴圈就夠了,非常簡單

#include #include using namespace std;

int a[100005];

int d[100005];

int main()

int maxn = 0;

for (int i = 1; i <= n; i++)

printf("%d\n", maxn);

return 0;

}

20200310之和最大子串行 (動態規劃)

題目描述 對於乙個給定的長度為n的整數序列a,它的 子串行 的定義是 a中非空的一段連續的元素 整數 你要完成的任務是,在所有可能的子串行中,找到乙個子串行,該子串行中所有元素的和是最大的 跟其他所有子串行相比 程式要求你輸出這個最大值。輸入輸入檔案的第一行包含乙個整數n,第二行包含n個整數,表示a...

最大子串行和(動態規劃)

最近溫習和提公升一下演算法,發現了乙個很經典的問題 最大子串行和,看到這篇部落格,發現講的很容易理解,給大家分享一下。給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,...

動態規劃 最大子串行

描述 1.從給定序列中找出連續最大子串行,滿足子串行的和為最大值,返回該最大值 2.從給定序列中找出連續最大子串行,滿足子串行的積為最大值,返回該最大值 思想 第一題首先申請乙個變數curmax表示當前子串行累計和,初始化為0,res表示當前所有子串行和的最大值,初始化為最小值int min。從序列...