Pagini recente » Cod sursa (job #1006643) | Cod sursa (job #1695303) | Cod sursa (job #1535567) | Cod sursa (job #1488550) | Cod sursa (job #2288259)
#include <cstdio>
#include <algorithm>
FILE *fin = freopen("transport.in","r",stdin);
FILE *fout = freopen("transport.out","w",stdout);
static const int NMAX = 16005;
int n,k, logN, maxi = -1;
int v[NMAX];
bool Check(int x)
{
if(x < maxi)
return false;
int ct = 0, aux = x;
for(int i = 1; i<= n; ++i)
{
if(aux - v[i] > 0)
aux-=v[i];
else if(aux - v[i] < 0)
{
ct++;
aux=x;
aux-=v[i];
}
else if(aux - v[i] == 0){
ct++;
aux = x;
}
}
ct++;
if(ct<=k)
return true;
return false;
}
int BinarySearch()
{
int k = 0;
for(int pas = logN; pas; pas >>=1)
{
if(!Check(pas+k))
k+=pas;
}
return k+1;
}
void ReadInput()
{
scanf("%d%d",&n,&k);
for(int i= 1; i<= n; ++i)
{
scanf("%d",&v[i]);
maxi = std::max(maxi,v[i]);
}
}
int main()
{
ReadInput();
logN = 1 << 14;
printf("%d",BinarySearch());
return 0;
}