Pagini recente » Cod sursa (job #2239909) | Cod sursa (job #2670300) | Cod sursa (job #2851910) | Cod sursa (job #747205) | Cod sursa (job #196042)
Cod sursa(job #196042)
#include<stdio.h>
#include<string.h>
#define N 16005
int main(){
int nr,n,k,i,j,v[N],c,s=0,vec=0,sp,ma,li,ls,lm,sum,sc;
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%d%d",&n,&nr);
for(i=0;i<n;i++){
scanf("%d",&v[i]);
if(v[i]>vec)
vec=v[i];
s+=v[i];
}
ma=s/nr;
if(ma*nr<s)
ma++;
if(nr==1)
c=s;
else
if(nr>=n)
c=vec;
else{
if(ma>vec)
vec=ma;
li=vec;
lm=n/nr;
if(lm*nr<n)
lm++;
sc=0;
for(i=0;i<lm;i++)
sc+=v[i];
sum=sc;
for(i=lm;i<n;i++){
sc=sc-v[i-lm]+v[i];
if(sum<sc)
sum=sc;
}
ls=sum;
if(li==ls)
c=li;
else
while(li<ls){
c=(li+ls)/2;
k=0;
i=0;
j=0;
while(i<n){
sp=0;
while(j<n&&sp<c){
sp+=v[j];
j++;
}
if(sp>c)
j--;
k++;
if(k>nr){
li=c+1;
break;
}
i=j;
}
if(li==ls){
c=li;
break;
}
if(k<=nr)
ls=c;
}
}
printf("%d",c);
return 0;
}