Pagini recente » Cod sursa (job #2680371) | Borderou de evaluare (job #430483) | Cod sursa (job #2545794) | Cod sursa (job #2567959) | Cod sursa (job #2749703)
#include <iostream>
#include <fstream>
#define cin inn
#define cout outt
#define INT_MAX 160001
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
int n,k,v[16001];
bool check(int nr)
{
int cmp=1,c=0;
for(int i=0;i<=n;i++)
{
if(v[i]>nr) return 0;
if(c+v[i]>nr)
{
cmp++;
c=0;
}
if(i!=n) c+=v[i];
}
return cmp<=k;
}
int main()
{
cin>>n>>k;
int up=0,mx=0;
for(int i=0;i<n;i++)
{
cin>>v[i];
up+=v[i];
if(v[i]>mx) mx=v[i];
}
int low=up/k;
int mn=INT_MAX;
int next=(up-low)/2;
int div=(up-low)/4;
while(div>=1)
{
//cout<<next<<' '<<div<<'\n';
int flag=check(next);
if(flag)
{
mn=mn>next?next:mn;
next-=div/2;
}
else next+=div/2;
div=div/2;
}
cout<<next;
return 0;
}