Pagini recente » Cod sursa (job #458482) | Cod sursa (job #96613) | Cod sursa (job #1038806) | Cod sursa (job #1984877) | Cod sursa (job #1699976)
#include <cstdio>
using namespace std;
int N,K,v[16001]={},Min=0,Max=0,Mid,M,val;
int sim(int size)
{
int pos=1,sum,moves=0;
while(pos<=N)
{
sum=0;
while(sum+v[pos]<=size&&pos<=N)
{
sum+=v[pos];
pos++;
}
moves++;
}
if(moves>K)
return 2;
else if(moves<K)
return 1;
else
return 0;
}
int main()
{
freopen ("transport.in","r",stdin);
freopen ("transport.out","w",stdout);
scanf("%d%d",&N,&K);
for(int i=1;i<=N;i++)
{
scanf("%d",&v[i]);
Max+=v[i];
if(v[i]>Min)
Min=v[i];
}
while(Min<Max)
{
Mid=(Min+Max)/2;
val=sim(Mid);
if(val==0)
{
M=Mid;
Max=Mid;
}
else if (val==1)
{
M=Mid;
Max=Mid-1;
}
else
Min=Mid+1;
}
if(sim(M)==0)
{
while(sim(M)==0)
M--;
M++;
}
else
M--;
printf("%d",M);
return 0;
}