Cod sursa(job #906635)
#include<iostream>
#include<fstream>
using namespace std;
long maxim,s,a[16001],i,k,n;
ifstream f("transport.in");
ofstream g("transport.out");
long verif (long c)
{
long s=0,nr=1;
for(i=1;i<=n;i++)
{
if((s+a[i])>c) { s=0; nr++;
if(nr>k) return 0; }
s+=a[i];
}
return 1;
}
long cautare (long i, long j)
{
long mij=(i+j)/2;
if(i==j) return i;
if(verif(mij)) return cautare(i,mij);
else return cautare(mij+1,j);
}
int main()
{
f>>n>>k;
for(i=1;i<=n;i++)
{
f>>a[i];
if(a[i]>maxim) maxim=a[i];
s+=a[i];
}
if(k==1) g<<s;
else if(k>=n) g<<maxim;
else g<<cautare(maxim,s);
f.close();
g.close();
return 0;
}