Asa's Website

D - Allocation

cpaojalds1

最終更新日

Table of Contents

Loading...

問題

https://onlinejudge.u-aizu.ac.jp/courses/lesson/1/ALDS1/4/ALDS1_4_D

問題文

重さがそれぞれ wiw_inn 個の荷物 kk 台のトラックへ。
連続する 0 個以上の荷物を積めるが、最大積載量は PP 以下 (全トラック共通)。

n,k,win, k, w_i が与えられるので、 PP の最小値を出力。

制約

サンプル

I/O 1

5 3 8 1 7 3 9
10

I/O 2

4 2 1 2 2 6
6

考察

典型的な決め打ちにぶたん。
区間は [maxwi,wi]=(maxwi1,wi]\left[ \max w_i, \sum w_i \right] = \left( \max w_i - 1, \sum w_i \right] であとはふつうにシミュレーション。

コード

https://onlinejudge.u-aizu.ac.jp/status/users/a01sa01to/submissions/1/ALDS1_4_D/judge/6768367/C++17

int main() { int n, k; cin >> n >> k; vector<int> w(n); rep(i, n) cin >> w[i]; int ok = accumulate(w.begin(), w.end(), 0); int ng = *max_element(w.begin(), w.end()) - 1; while (ok - ng > 1) { int mid = (ok + ng) / 2; int used = 1, now = 0; rep(i, n) { if (now + w[i] > mid) { used++; now = w[i]; } else { now += w[i]; } } (used <= k ? ok : ng) = mid; } cout << ok << endl; return 0; }