Pagini recente » Cod sursa (job #1896945) | Cod sursa (job #3215898) | Cod sursa (job #1604417) | Cod sursa (job #1881845) | Cod sursa (job #966098)
Cod sursa(job #966098)
#include <cstdio>
using namespace std;
int v[3002];
int n, k;
bool incerc(int c)
{
int i, s=0, nr=0;
for(i=1; i<=n; ++i)
{
if (v[i]>c)
return 0;
if (s+v[i]>c)
{
++nr;
s=v[i];
}
else
s+=v[i];
if (nr>k)
return 0;
}
if (s>0)
++nr;
if (nr>k)
return 0;
return 1;
}
int bs_left(int st, int dr)
{
int med, last=1;
while(st<=dr)
{
med=st+(dr-st)/2;
if (incerc(med))
{
last=med;
dr=med-1;
}
else
st=med+1;
}
return last;
}
int main ()
{
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%d%d",&n,&k);
int i, s=0;
for(i=1; i<=n; ++i) {
scanf("%d",&v[i]);s+=v[i]; }
printf("%d\n",bs_left(1,s));
return 0;
}