Cod sursa(job #129887)
| Utilizator | Data | 30 ianuarie 2008 15:31:44 | |
|---|---|---|---|
| Problema | Transport | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.55 kb |
#include<stdio.h>
#define N 16010
int v[N];
int main(){
int c,n,i,k,s,a,b,u,min=-N;
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%d%d",&n,&k);
for(i=1;i<=n;++i){
scanf("%d",&v[i]);
if (min<v[i])
min=v[i];
s+=v[i];
}
a=1;
b=s;
while (b-a>1){
c=(a+b)/2+(a+b)%2;
s=0;
u=1;
for (i=1;i<=n;++i){
s=s+v[i];
if (s>c){
++u;
s=v[i];
}
}
if (u>k || c<min)
a=(a+b)/2+(a+b)%2;
else
b=(a+b)/2+(a+b)%2;
}
printf("%d",(a+b)/2+(a+b)%2);
return 0;
}
