Pagini recente » Cod sursa (job #1880628) | Cod sursa (job #2668148) | Cod sursa (job #2386372) | Cod sursa (job #2373674) | Cod sursa (job #2875553)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int profu(int m,int n,int a[]){
int s=0,cnt=1;
for(int i=1;i<=n;i++){
if(s+a[i]<=m)s+=a[i];
else cnt++,s=a[i];
}
return cnt;
}
int main() {
//cap minima = max(cap minima,a[i])
// cap max <=> k=1 => cam minima = S(a[i]) (i = 1,...,n);
int n,mij,k,maxi(0),st=-1,ans,dr(0),s(0),a[16500];
fin >> n >> k;
for(int i=1;i<=n;++i)fin>>a[i],st=max(st,a[i]),dr+=a[i];
for(int i=1;i<=n;i++){
while(st<=dr){
mij=(st+dr)/2;
if(profu(mij,n,a)<=k)ans=mij,dr=mij-1;
else st=mij+1;
}
}
fout << ans;
return 0;
}