Pagini recente » Cod sursa (job #798648) | Cod sursa (job #577094) | Cod sursa (job #176171) | Cod sursa (job #177874) | Cod sursa (job #1699979)
#include <cstdio>
using namespace std;
int N,K,v[16001]={},Min=0,Max=0,Mid,M,val,MAX=0;
int sim(int size)
{
if(size==0)
return 2;
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]>MAX)
MAX=v[i];
}
Min=MAX;
if(N>K)
{
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
while(sim(M)==1)
M--;
}
else
{
M=MAX;
}
printf("%d",M);
return 0;
}