子段和問題

2021-08-15 02:20:59 字數 845 閱讀 9756

【最大子段和】51nod 1049 最大子段和

problem description

n個整數組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的連續子段和的最大值。當所給的整數均為負數時和為0。

例如:-2,11,-4,13,-5,-2,和最大的子段為:11,-4,13。和為20。

思路:

dp[i]代表 以第i個元素結尾的最大子段和。取第i個元素的時候 兩種取法,要麼第i個元素單獨成一段,要麼加在第i-1個元素結尾的最大子段和的後面。

故狀態轉移方程dp[i] = max(dp[i-1]+a[i], a[i]);//a[i]代表第i個元素

#include

using

namespace

std;

#define ll long long

const

int n = 5*1e4 + 100;

ll dp[n];//dp[i]代表 以第i個元素結尾的最大子段和

int main()

cout

<< ans << endl;

}

#include

using

namespace

std;

#define ll long long

int main()

cout

<< ans;

}

最大m子段和問題

最大m子段和問題 給定由n個整數 可能為負數 組成的序列a1,a2 an 以及乙個正整數m,要求確定a1,a2 an 的m個不相交子段,使m個子段和達到最大。設b i,j 表示陣列a的前j項中i個子段的和的最大值,且第i個子段含a j 1 i m,i j n 則所求最優值為 與最大子段和問題類似,計...

Problem I 最大連續子段和問題

給定有n個整數 可能為負整數 組成的序列a1,a2,an,求該序列連續的子段和的最大值。如果該序列的所有元素都是負整數時定義其最大子段和為0。例如,當 a1,a2,a3,a4,a5 5,11,4,13,4 2 時,最大子段和為11 4 13 20。第一行整數個數n,第二行為n個整數,每個整數之間用一...

最大m子段和

最大m子段和問題 給定由n個整數 可能為負 組成的序列a1 a2 a3.an,以及乙個正整數m,要求確定序列的m個不想交子段,使這m個子段的總和最大!設b i,j 表示陣列a的前j項中i個子段和的最大值,並且第i個子段包含a j 1 i m,i j n 則所求的最優值為maxb m,j m j n ...