Cod sursa(job #1666356)
Utilizator | Data | 27 martie 2016 23:03:29 | |
---|---|---|---|
Problema | Transport | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.74 kb |
#include <cstdio>
using namespace std;
int s[16001];
int main(){
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
int i,n,d,l1,l2,m,k,cap,min=-1;
scanf("%d%d",&n,&d);
for(i=1;i<=n;i++){
scanf("%d",&s[i]);
if(s[i]>=min)
min=s[i];
}
l1=min;
l2=256000000;
while(l1<=l2){
m=(l1+l2)/2;
cap=0;
k=1;
for(i=1;i<=n;i++){
if(cap+s[i]<=m){
cap=cap+s[i];
}
else {
k++;
cap=s[i];
}
}
if(k<=d){
l2=m-1;
}
else{
l1=m+1;
}
}
printf("%d",m);
}