最小m子段和(動態規劃)

2022-07-19 19:12:16 字數 468 閱讀 3985

問題描述: 

給定n個整數組成的序列,現在要求將序列分割為m段,每段子序列中的數在原序列中連續排列。如何分割才能使這m段子序列的和的最大值達到最小?

輸入格式:

第一行給出n,m,表示有n個數分成m段,隨後一行給出n個數,以空格分隔

輸入樣例:

9 39 8 7 6 5 4 3 2 1

輸出樣例:

解釋:9 8 | 7 6 | 5 4 3 2 1,9個數分成3段所有情況裡這種分法的最大子段和(17)最小。

思路:動態規劃的一種模板,包括矩陣連乘,石子歸併等問題。先是考慮分的段數,然後考慮起點/終點,最後是每段中分割點的位置。

本題中使用 dp[i][j]表示前i個數分成j段裡最小的最大子段和,則dp[i][j]=min

21 dp[i][r]=mins;22}

23}24 cout<25return0;

26 }

最小m子段和問題 C語言 動態規劃

題目描述 給定n個整數組成的序列,現在要求將序列分割為m段,每段子序列中的數在原序列中連續排列。如何分割才能使這m段子序列的和的最大值達到最小?解題思路 用dp i j 儲存長度為i,分j段後其子序列和的最大值的最小值,那麼它由兩部分構成 當j 1時,dp i 1 表示的是長為i的整個序列的和 當j...

動態規劃 最大m子段和

繼最大子段和在空間上的推廣,那麼再來看看她在個數上的延伸。最大子段和就是最大m子段和問題在m 1時的特殊情況 類似最大欄位和中的b j 這裡假設b i,j 表示陣列a的前j項中i個子段和的最大值,且第i個子段含a j 其中b i,j 1 a j 表示第i個子段含a j 而 初始時b 0,j 0,0 ...

動態規劃 最大m子段和

在最大m子段和問題中,要求取m個互不相交子段,和為最大值。最大m子段和問題是最大子段和在子段個數上的推廣,最大子段和問題是m 1的特殊情況。在這個問題中,我們使用乙個矩陣b i j 他表示的意義是在前 j 項中被分為 i 段的最大 i 子段和。首先,既然是前 j 項需要分為 i 段,所以當 i j ...