問題描述
對於乙個給定的長度為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。從序列...