Pagini recente » Cod sursa (job #1495784) | Cod sursa (job #3129623) | Cod sursa (job #2053471) | Cod sursa (job #1671828) | Cod sursa (job #186300)
Cod sursa(job #186300)
#include<stdio.h>
#define NMAX 16000
#define FIN "transport.in"
#define FOUT "transport.out"
int main(){
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
int n,nrtr,k,i,v[NMAX],c,j,s=0,vmax=0,sp,ma,li,ls,lm,smax,sc,gata;
scanf("%d%d",&n,&nrtr);
for(i=0;i<n;i++) {
scanf("%d",&v[i]);
if(v[i]>vmax) vmax=v[i];
s+=v[i];
}
ma=s/nrtr;
if(ma*nrtr<s) ma++;
if(nrtr==1) c=s;
else if(nrtr>=n) c=vmax;
else{
if(ma>vmax) vmax=ma;
li=vmax;
// det ls
lm=n/nrtr;
if(lm*nrtr<n) lm++;
sc=0;
for(i=0;i<lm;i++) sc+=v[i];
smax=sc;
for(i=lm;i<n;i++) {
sc=sc-v[i-lm]+v[i];
if(smax<sc) smax=sc;
}
ls=smax;
gata=0;
//c=li;
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>nrtr) {li=c+1;break;}
i=j;
}
if(li==ls) {c=li;break;}
// if(k==nrtr&&li<ls) ls--;
if(k<=nrtr) ls=c;
}
}
printf("%d",c);
return 0;
}