Cod sursa(job #202981)
Utilizator | Data | 12 august 2008 15:29:08 | |
---|---|---|---|
Problema | Transport | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.53 kb |
#include <stdio.h>
#define N 16001
int v[N],n,k,sol=1<<30;
int valid(int x){
int l=n,t=0,s;
while(l){
s=0;
while(l && s+v[l]<=x){
s+=v[l];
l--;
}
if(!s) return 0;
t++;
}
if(t<=k){
if(x<sol) sol=x;
return 1;
}
return 0;
}
int main(){
int i,st=1,dr=1<<30,m;
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
scanf("%d",&v[n-i+1]);
while(st<dr){
m=(st+dr)/2;
if(valid(m)) dr=m;
else st=m+1;
}
printf("%d\n",sol);
}