AOJ 0181 - Persistence
はじめての2分探索.
#include<iostream> const int INF = 1 << 24; int m, n, a[100];//dansu, honsu bool C(double x){ int i = 0, j = 0, l = 0; while(i < n && j < m){ if(l + a[i] <= x){//入る l += a[i]; i++; }else{//もう入らない l = 0; j++; } } if(i == n && j < m)return true; return false; } int main(){ while(std::cin >> m >> n, m){ for(int i=0;i<n;i++){ std::cin >> a[i]; } int lb = 0, ub = INF; for(int i=0;i<100;i++){ int mid = (lb + ub) / 2; if(C(mid))ub = mid; else lb = mid; } std::cout << ub << std::endl; } }