Pagini recente » Cod sursa (job #1170892) | Cod sursa (job #664238) | Cod sursa (job #752646) | Cod sursa (job #1263231) | Cod sursa (job #1216078)
#include <cstdio>
#include <algorithm>
using namespace std;
#define NMAX 20000
int left,right,mid,N,K,final,i;
int A[NMAX];
bool transport(int cantitate)
{
int i,current=0,curse=0;
for (i=1;i<=N;++i)
{
if (A[i]>cantitate)
return false;
if (current+A[i]>cantitate)
{
++curse;
current=0;
}
current+=A[i];
}
++curse;
return (curse<=K);
}
int main()
{
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%d%d",&N,&K);
for (i=1;i<=N;++i)
{
scanf("%d",&A[i]);
left=(i==1) ? A[i] : min(left,A[i]);
right+=A[i];
}
while (left<=right)
{
mid=(left+right)>>1;
if (transport(mid))
{
final=mid;
right=mid-1;
continue;
}
left=mid+1;
}
printf("%d\n",final);
return 0;
}