Cod sursa(job #505349)
Utilizator | Data | 1 decembrie 2010 20:24:40 | |
---|---|---|---|
Problema | Transport | Scor | 40 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.51 kb |
#include <stdio.h>
int a[16001], n, s, i, max, min, mij, min1, nr, k;
int main(){
freopen ("transport.in","r",stdin);
freopen ("transport.out","w",stdout);
scanf ("%d%d",&n,&k); min1=99999; min=0;
for (i=1;i<=n;i++){
scanf ("%d",&a[i]);
s=s+a[i];}
max=s;
while (min<=max){
mij=(min+max)/2;
nr=1; s=0;
for (i=1;i<=n;i++){
s=s+a[i];
if (s>mij){nr++; s=a[i];}}
if (nr>k){min=mij+1;}
if (nr<=k){ if (mij<min1){min1=mij;}
max=mij-1;}}
printf ("%d",min1);
return (0);
}