Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Allocation"
https://onlinejudge.u-aizu.ac.jp/problems/ALDS1_4_D
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #ALDS1_4_D : Allocation
/* Aizu Online Judge in C++ #ALDS1_4_D : Allocation https://onlinejudge.u-aizu.ac.jp/problems/ALDS1_4_D 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n,k; cin>>n>>k; ll w[n]; ll sum=0; for(ll i=0;i<n;i++){ cin>>w[i]; sum+=w[i]; } ll l=0,r=sum; while(l+1<r){ ll mid=(l+r)/2; ll t=0,num=0; bool tf=false; for(ll i=0;i<n;i++){ tf|=w[i]>mid; if(num+w[i]>mid){ num=w[i]; t++; }else{ num+=w[i]; } } if(num){ t++; } if(tf==false && t<=k){ r=mid; }else{ l=mid; } } cout<<r<<endl; return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/