Cod sursa(job #589081)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 10 mai 2011 19:27:39
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb

#include <cstdio>
#include <fstream>

using namespace  std;

int v[16384];
int r,n,k;

int ok (int x){

    int m=0,s=0;
    for(int i=1;i<=n;++i){
        if(s+v[i]>x){
            ++m;
            s=v[i];
        }
        else
            s+=v[i];
    }

return m+1;}

void srch (int ft,int bk){

    int m=(ft+bk)>>1,kk=ok(m);
    if(ft==bk){
        if(ft<r&&kk<=k)
            r=ft;
        return;
    }
    if(kk<=k){
        if(m<r)
            r=m;
        srch(ft,m);
       }
    if(kk>k)
    srch(m+1,bk);

}

int main ()
{

    int x=0;
    ifstream in ("transport.in");
    freopen ("transport.out","w",stdout);
    in>>n>>k;
    for(int i=1;i<=n;++i){
        in>>v[i];
        if(x<v[i])
            x=v[i];
        r+=v[i];
    }
    srch(x,r);
    printf("%d",r);

return 0;}