Pagini recente » Cod sursa (job #277228) | Cod sursa (job #278182) | Cod sursa (job #455444) | Cod sursa (job #1989167) | Cod sursa (job #595309)
Cod sursa(job #595309)
#include<cstdio>
#include<iostream>
using namespace std;
int n,k,v[16005];
int maxim,sum,sol;
int Verificare(int x)
{
int i,nr=1,suma=0;
for(i=1;i<=n;i++)
{
if(suma+v[i]>x)
{
nr++;
suma=v[i];
}
else
suma+=v[i];
}
if(nr<=k)
return 1;
return 0;
}
int CautareBinara()
{
int st,dr,m;
st=maxim;
dr=sum;
while(st<=dr)
{
m=(st+dr)/2;
if(Verificare(m)==1 && Verificare(m-1)==0)
return m;
else
if(Verificare(m)==1)
dr=m-1;
else
st=m+1;
}
return -1;
}
int main()
{
int i;
freopen("transport.in","r",stdin);
scanf("%d %d",&n,&k);
for(i=1;i<=n;i++)
{
scanf("%d",v+i);
maxim=max(maxim,v[i]);
sum+=v[i];
}
sol=CautareBinara();
freopen("transport.out","w",stdout);
printf("%d\n",sol);
return 0;
}