410 分割陣列的最大值

2022-05-08 21:57:08 字數 825 閱讀 3234

給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這 m 個子陣列各自和的最大值最小。

注意:陣列長度 n 滿足以下條件:

1 ≤ n ≤ 1000

1 ≤ m ≤ min(50, n)

示例:輸入:

nums = [7,2,5,10,8]

m = 2

輸出:解釋:

一共有四種方法將nums分割為2個子陣列。

其中最好的方式是將其分為[7,2,5] 和 [10,8],

因為此時這兩個子陣列各自的和的最大值為18,在所有情況中最小。

dp:用乙個二維陣列dp記錄之前的狀態,對於0~i的陣列來說:任意0~k(0陣列長度n,需要分成m個子陣列:那麼dp[i][j]表示截止到i的陣列,分成j個子陣列,各自和的最大值

class

solution

for(int i=1;ii)

sum+=nums[k];}}

}return dp[n-1

][m];}};

縮減為一維dp:

class

solution

vector

dp(n,int_max);

//初始dp[i]:截止i只有乙個子陣列的子陣列和最大值

dp[0]=nums[0

];

for(int i=1;ii)

for(int subsets=2;subsets<=m;++subsets)}}

return dp[n-1

]; }

};

410 分割陣列的最大值

給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這 m 個子陣列各自和的最大值最小。令dp i j 表示陣列前i個數分成j段時的最小和,那麼我們可以列舉k,表示前k個數分成了j 1段,那麼後k 1到i個數就被分成了一段,此時狀態轉移方程就是 sub...

410 分割陣列的最大值

給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這 m 個子陣列各自和的最大值最小。注意 陣列長度 n 滿足以下條件 示例 輸入 nums 7,2,5,10,8 m 2 輸出 18 解釋 一共有四種方法將nums分割為2個子陣列。其中最好的方式是將...

410 分割陣列的最大值 C

給定乙個非負整數陣列和乙個整數 m,你需要將這個陣列分成 m 個非空的連續子陣列。設計乙個演算法使得這 m 個子陣列各自和的最大值最小。注意 陣列長度 n 滿足以下條件 1 n 1000 1 m min 50,n 示例 輸入 nums 7,2,5,10,8 m 2 輸出 18 解釋 一共有四種方法將...