Cod sursa(job #688103)

Utilizator informatician28Andrei Dinu informatician28 Data 23 februarie 2012 00:24:25
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream> 
#define DIM 16001
using namespace std; 

ifstream in("transport.in");
ofstream out("transport.out");

int N, K, Val[DIM], maxim, st, mid, Sol;
long long sum, dr;

int main()
{
    int i;
    
    in >> N >> K;
    for(i = 1; i <= N; i++)
    {
        in >> Val[i]; 
        sum += Val[i];
        if( Val[i] > maxim )
            maxim = Val[i];
    }
    st = maxim, dr = sum;
    
    while( st <= dr )
    {
        int CurrentK = 1, S = 0;
        mid = st + (dr-st)/2;
        
        for(i = 1; i <= N; i++)
            if( S + Val[i] <= mid )
                S += Val[i];
            else 
                S = Val[i], CurrentK++;
        if( CurrentK > K ) //cap prea mica 
            st = mid + 1;
        else 
            Sol = mid, dr = mid-1;
    }
    out << Sol;
    return 0;
}