Cod sursa(job #341965)

Utilizator hendrikHendrik Lai hendrik Data 20 august 2009 06:41:23
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
using namespace std;

#define MAXN 16001
int sum,n,m,v[MAXN],lo,hi,ans;

bool ok(int a){
    int tmp=0,cnt=1;
    for (int i=0;i<n;i++){
        if (tmp+v[i]<=a){
            tmp+=v[i];
        }
        else {
            tmp=v[i];
            cnt++;
            if (cnt>m) return 0;
        }
    }
    return 1;
}

void open(){
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
}

int main(){
    open();
    scanf("%d %d",&n,&m);
    sum=0;
    lo=0;
    for (int i=0;i<n;i++){
        scanf("%d",&v[i]);
        lo=max(v[i],lo);
        sum+=v[i];
    }
    hi=sum;
    while (1){
        int mid=(lo+hi)/2;
        if (ok(mid)){
            ans=mid;
            hi=mid-1;
        }
        else lo=mid+1;
        if (lo>hi) break;
    }
    printf("%d\n",ans);
    //system("pause");
    return 0;
}