Pagini recente » Cod sursa (job #716306) | Cod sursa (job #1247812) | Cod sursa (job #3294551) | Cod sursa (job #3162376) | Cod sursa (job #1002845)
#include <iostream>
#include <cstdio>
using namespace std;
int n,k,s;
int v[16010];
inline void Read()
{
int i;
s = 0;
FILE *f = fopen("transport.in","r");
fscanf(f,"%d %d",&n,&k);
for( i = 1; i<= n;++i)
{
fscanf(f,"%d",&v[i]);
s+=v[i];
}
fclose(f);
}
inline bool Posibil(int nr)
{
int i,capacity = nr,nrtransp = 0;
for( i = 1; i<=n ;++i )
{
if(capacity - v[i] >= 0)
capacity -= v[i];
else
{
++nrtransp;
capacity = nr - v[i];
}
}
++nrtransp;
if( nrtransp <= k )
return true;
return false;
}
inline void Bsearch()
{
int i,maxim=v[1],st,dr,mij,sol;
for( i = 2 ; i <=n ; ++i)
maxim= max(maxim,v[i]);
st = maxim;
dr = s;
while( st<=dr )
{
mij = (st+dr)/2;
if( Posibil(mij) )
{
sol = mij;
dr = mij -1;
}
else
st = mij+1;
}
FILE *g = fopen("transport.out","w");
fprintf(g,"%d ",sol);
fclose(g);
}
int main()
{
Read();
Bsearch();
return 0;
}