Cod sursa(job #1251681)

Utilizator ConstantinPetroviciPetrovici Constantin ConstantinPetrovici Data 29 octombrie 2014 19:46:30
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <cstdio>

using namespace std;

int n , k ,v[16007];

int greedy(int x)
{
    int nr=1;
    int suma=0;
    for ( int i = 1 ; i <= n ; ++i )
    {
        if ( v [ i ] > x )
            return 0 ;
        if (suma+v[i]<=x){
            suma=suma+v[i];
        }
        else
        {
            suma=v[i];
            nr++;
        }
    }
    if (nr>k)return 0;
    return 1;
}
int main()
{
    freopen ("transport.in" , "r" , stdin );
    freopen ("transport.out" , "w" , stdout );
    scanf ("%d%d" , &n , &k );
    for ( int i = 1 ; i <= n ; ++i )
        scanf ("%d" , &v[i] ) ;
    int st=1,sol;
    int dr=2560000;
    while (st<=dr)
    {
     int mij=(st+dr)/2;
     if ( greedy (mij) == 1 ){
                            dr=mij-1;
                            sol=mij;

                            }
        else
            st=mij+1;
    }
    printf ("%d" , sol);
    return 0;
}