Cod sursa(job #1100042)

Utilizator YoChinezuWeng Mihai Alexandru YoChinezu Data 6 februarie 2014 15:53:38
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>

using namespace std;

int v[16005],n,k;

bool ok(int nn){
    int tr=0,s=0;
    bool flag=false;
    for(int i=1;i<=n;i++){
        if(s+v[i]<=nn){
            s+=v[i];
        }else{
            s=v[i];
            tr++;
            if(i==1){
                flag=true;
            }
        }
    }
    if(!flag){
        tr++;
    }
    if(tr<=k){
        return 1;
    }else{
        return 0;
    }
}

int bs(int st,int dr){
    int med,last=-1;
    while(st<=dr){
        med=st+(dr-st)/2;
        if(ok(med)){
            last=med;
            dr=med-1;
        }else{
            st=med+1;
        }
    }
    return last;
}

int main(){
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);

    int s=0;
    scanf("%d%d",&n,&k);

    for(int i=1;i<=n;i++){
        scanf("%d",&v[i]);
        s+=v[i];
    }

    printf("%d",bs(1,s));

    return 0;
}