Cod sursa(job #1751382)

Utilizator robx12lnLinca Robert robx12ln Data 1 septembrie 2016 12:31:53
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n, st, dr, mid, v[16005], k;
int vf( int x ){
    int nr = 0;
    int c = 0;
    for( int i = 1; i <= n; i++ ){
        if( c + v[i] <= x ){
            c += v[i];
        }else{
            nr++;
            c = v[i];
        }
    }
    if( c != 0 ){
        nr++;
    }
    if( nr <= k ){
        return 0;
    }else{
        return 1;
    }
}
int main(){
    fin >> n >> k;
    for( int i = 1; i <= n; i++ ){
        fin >> v[i];
        dr += v[i];
        st = max( st, v[i] );
    }
    st = st;
    dr = dr;
    while( st <= dr ){
        mid = ( st + dr ) / 2;
        if( vf(mid) == 1 ){
            st = mid + 1;
        }else{
            dr = mid - 1;
        }
    }
    fout << st;
    return 0;
}