模板 動態規劃之最大子段和 最大子矩陣問題

2021-09-29 13:36:37 字數 2215 閱讀 3096

給出一段序列,選出其中連續且非空的一段使得這段和最大。

input:

第一行是乙個正整數n(n <= 200000),表示了序列的長度。

第接下來的n行包含n個絕對值不大於10000的整數a[i],描述了這段序列。

output:

僅包括1個整數,為最大的子段和是多少。子段的最小長度為1。

sample input:

2 -4 3 -1 2 -4 3

sample output:

#includeusing namespace std;

int a[200001];

int main(void)

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

return 0;

}

給定k個整數的序列,其任意連續子串行可表示為,其中 1 <= i <= j <= k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和為20。現在增加乙個要求,即還需要輸出該子串行的第乙個和最後乙個元素。

測試輸入包含若干測試用例,每個測試用例佔2行,第1行給出正整數k( k< 10000 ),第2行給出k個整數,中間用空格分隔。當k為0時,輸入結束,該用例不被處理。

對每個測試用例,在1行裡輸出最大和、最大連續子串行的第乙個和最後乙個元素,中間用空格分隔。如果最大連續子串行不唯一,則輸出序號i和j最小的那個(如輸入樣例的第2、3組)。若所有k個元素都是負數,則定義其最大和為0,輸出整個序列的首尾元素。

6

-2 11 -4 13 -5 -2

10-10 1 2 3 4 -5 -23 3 7 -21

65 -8 3 2 5 0110

3-1 -5 -2

3-1 0 -2

0

20 11 13

10 1 4

10 3 5

10 10 10

0 -1 -2

0 0 0

說明:雖然ac但可能不太優雅。另外此題可以暴力求解。

#include#include#define min 0x3f3f3f3f

using namespace std;

int dp[10001];

int a[10001];

int main(void)

int max = 0;

int start=1;

int startindex=1,endindex=1;

dp[1]=a[1];

bool flag=false;

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

if(dp[i]>max)

} if(!flag) cout思路:對於

//最大子矩陣和

//經驗教訓

//i,j盡量留給陣列下標

//盡量用實際含義來命名變數

#include#include#include#define min 0x80000000

using namespace std;

int arr[101][101];

int total[101];

int n,m,size;

int maxarraysum(int a,int n)

return max;

} int main(void)

} printf("%d\n",ans);

} return 0;

}

延伸閱讀【模板】動態規劃之揹包問題(01揹包、多重揹包、完全揹包) (郵票、piggy-bank題解)

【模板】動態規劃之最長上公升子串行lis問題、概率dp問題 (烟花題解)

【模板】動態規劃之基本思想、最長公共子串行lcs問題 (coincidence題解)

【模板】動態規劃之最大欄位和、最大子矩陣問題

動態規劃之最大子段和問題

問題描述 給定由n個整數 包含負整數 組成的序列a1,a2,an,求該序列子段和的最大值。當所有整數均為負值時定義其最大子段和為0。依此定義,所求的最優值為 例如,當 a1,a2 a3 a4 a5 a6 2,11,4,13,5,2 時,最大子段和為 11 4 13 20 1 最大子段和問題的簡單演算...

動態規劃之最大子段和問題

有一由n個整數組成的序列a 求該序列如 a i a i 1 a j 的子段和的最大值。如果序列中全部是負數則最大子段和為0,依此定義,所求的最優值max,1 i j n。輸入 n 序列的長度 序列值輸出 最大子段和 例如 輸入 6 2,11,4,13,5,2 輸出 20演算法可通過動態規劃求解 我們...

動態規劃之最大子段和問題

問題描述 給定由n個整數 包含負整數 組成的序列a1,a2,an,求該序列子段和的最大值。當所有整數均為負值時定義其最大子段和為0。依此定義,所求的最優值為 例如,當 a1,a2 a3 a4 a5 a6 2,11,4,13,5,2 時,最大子段和為 11 4 13 20 1 最大子段和問題的簡單演算...