Cod sursa(job #625200)

Utilizator sebii_cSebastian Claici sebii_c Data 23 octombrie 2011 23:38:27
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <stdio.h>
#define NMAX 16005

int A[NMAX];

int main()
{
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    int N, K, i, lo = 0, hi = 0;
    scanf("%d %d", &N, &K);
    for (i=1; i<=N; ++i) { 
        scanf("%d", &A[i]);
        hi += A[i];
        if (A[i] > lo)
	lo = A[i];
    }
    while (lo < hi) {
        int x = lo + (hi-lo)/2;
        int required = 1, current = 0;
        
        for (i=1; i<=N; ++i) 
	if (current+A[i] <= x) 
	    current += A[i];
	else {
	    ++required;
	    current = A[i];
	}
        if (required <= K)
	hi = x;
        else
	lo = x+1;
    }
    printf("%d", lo);
    return 0;
}