Cod sursa(job #262711)
Utilizator | Data | 19 februarie 2009 16:29:13 | |
---|---|---|---|
Problema | Transport | Scor | 70 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.56 kb |
#include<algorithm>
using namespace std;
#define INF 10000001
int n,k,a[16001];
void solve(){
int i,s,m,st,dr,min,cont;
scanf("%d%d",&n,&k);
for(i=1; i<=n; ++i)
scanf("%d",&a[i]);
for(st=1,dr=min=INF; st<=dr; ){
m=(st+dr)/2;
for(i=cont=1,s=0; i<=n; ++i)
if(s+a[i]<=m)
s+=a[i];
else{
++cont;
s=a[i];}
if(cont>k)
st=m+1;
else{
min=m;
dr=m-1;}}
printf("%d",min);}
int main(){
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);
solve();
return 0;}