Pagini recente » Cod sursa (job #2741805) | Cod sursa (job #2523999) | Cod sursa (job #296365) | Cod sursa (job #2770756) | Cod sursa (job #740998)
Cod sursa(job #740998)
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
#define maxx 16001
#define nmax 200000000
int minim=nmax,v[maxx],n,k,s,start,end;
bool check(int capacity);
int main()
{
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%i %i", &n,&k);
for(int i=0;i<n;i++)
{
scanf("%i", &v[i]);
minim=min(minim,v[i]);
}
start=minim, end=nmax;
while(start<=end)
{
int m=start+(end-start)/2;
if(check(m))
{
s=m;
end=m-1;
}else
{
start=m+1;
}
}
printf("%i\n", s);
//int i;
//scanf("%i", &i);
return 0;
}
bool check(int capacity)
{
int CurrentVolume=0,Transports=0;
for(int i=0;i<n;i++)
{
if(CurrentVolume+v[i]<=capacity)
{
CurrentVolume+=v[i];
}else
{
CurrentVolume=v[i];
Transports++;
}
}
if(CurrentVolume) Transports++;
return Transports<=k;
}