题意:
。。。
思路:
因为是分成连续的段,check的时候每一段能装则装就好了。
int check(int limi) {
//cout << "\nlimi: " << limi << endl;
int mons = 0, i = n-1;
while (mons < m) {
int v = 0, days = 0;
while (i>=0 && v + a[i]<=limi) v += a[i--], days += 1;
if (!days) return 0;
if (i<0) return 1;
//cout << i << ' ' << v << ' ' << days << endl;
++mons;
}
if (i<0) return 1;
return 0;
}
int solve() {
int tot = 0;
rep(i, 0, n-1) tot += a[i];
int l = 0, r = tot+1;
while (l<r-1) {
int mid = l+((r-l)>>1);
//cout << "check " << mid << ": \n";
if (check(mid)) r = mid;
else l = mid;
}
return r;
}