Cod sursa(job #1201060)

Utilizator tudormaximTudor Maxim tudormaxim Data 24 iunie 2014 13:44:58
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <iostream>
using namespace std;
int n,k,v[16000];
bool verifica(int volum)
{
    int s=0,i=0,nrt=0;
    for(i=0; i<n; ++i)
    {
        if (s+v[i]>volum)
        {
            ++nrt;
            s=0;
            --i;
        }
        else s+=v[i];
    }
    if(s>0) ++nrt;
    return nrt<=k;

}

int caut(int st, int dr)
{
    if(st>dr) return st;
    int m;
    m=(st+dr)/2;
    if(verifica(m)) return caut(st,m-1);
    else return caut(m+1,dr);
}
int main ()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    int st(0),dr(0),m,i;

    cin>>n>>k;
    for(i=0; i<n; ++i)
    {
        cin>>v[i];
        st=max(st,v[i]);
        dr+=v[i];
    }
    cout<<caut(st,dr);
    return 0;
}