Cod sursa(job #647542)

Utilizator warchildmdMihail Burduja warchildmd Data 11 decembrie 2011 16:33:17
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <stdio.h>

int N, K;
int sizes[16001];

int count(int truck_size)
{
    int current_size = 0;
    int drives = 0;
    for(int i = 0; i < N; i++)
    {
        if(current_size + sizes[i] <= truck_size)
        {
            current_size += sizes[i];
        }
        else
        {
            drives++;
            current_size = sizes[i];
        }
    }
    drives++;
    return drives;
}

int binary_search(int start, int end)
{
    int sol = 0;
    while(start < end)
    {
        int mid = (start+end)/2;
        int nr_drives = count(mid);
        //printf("Number of drives for Size = %d is %d\n", mid, nr_drives);
        if(nr_drives > K)
        {
            start = mid + 1;
        }
        else
        {
            sol = mid;
            end = mid;
        }
    }
    return sol;
}

int main()
{
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    scanf("%d %d", &N, &K);
    for(int i = 0; i < N; i++)
    {
        scanf("%d", &sizes[i]);
    }

    int max = 0, sum = 0;

    for(int i = 0; i < N; i++)
    {
        sum += sizes[i];
        if(max < sizes[i])
        {
            max = sizes[i];
        }
    }

    printf("%d\n", binary_search(max, sum));
    return 0;
}