Cod sursa(job #317958)
#include <fstream.h>
#define N 16001
//using namespace std;
ifstream f1 ("transport.in");
ofstream f2 ("transport.out");
int v[N],n,k,f,max;
int valid (int c)
{
int nr=1, suma=0;
f=1;
for (int i=1; i<=n; i++)
{
suma+=v[i];
if (suma>c) {nr++; suma=v[i];}
if (nr>k) return 0;
}
return (nr<=k);
}
int main ()
{int t,i,st,dr,k2,val;
f1>>n>>k;
t=0;
for (i=1 ;i<=n;i++)
{f1>>v[i];
t+=v[i];
if (v[i]>max) max=v[i];
}
st=max;
dr=t;
val=max;
while (st<=dr)
{
k2=(st+dr)/2;
if (valid(k2)&&!valid(k2-1)) val=k2;
if (valid(k2)) dr=k2-1;
else st=k2+1;
}
f2<<val;
return 0;
}