410 分割陣列的最大值 C

2021-09-19 01:25:46 字數 744 閱讀 7547

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

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

1 ≤ n ≤ 1000 1 ≤ m ≤ min(50, n) 示例:

輸入: nums = [7,2,5,10,8] m = 2

輸出: 18

解釋: 一共有四種方法將nums分割為2個子陣列。 其中最好的方式是將其分為[7,2,5] 和 [10,8],

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

解題思路:

使用二分法

先猜出乙個mid作為答案,然後以mid為標準取劃分陣列。

同時記錄所需陣列的數量need。

如果我們分的陣列個數比題目要求的多,那麼就意味著我們猜的答案偏小。

然後搜尋右半邊。

反之同理。

int

splitarray

(vector<

int>

& nums,

int m)

while

(lvalcur+

=num;}if

(need>m)

lval=mid+1;

else

rval=mid;

}return lval;

}

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 分割陣列的最大值

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