Cod sursa(job #88646)

Utilizator mugurelionutMugurel-Ionut Andreica mugurelionut Data 3 octombrie 2007 11:54:23
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <stdio.h>

#define NMAX 16666

int V[NMAX];
int i, N, K, li, ls, S, Cc, T, C;

int main()
{
	freopen("transport.in", "r", stdin);
	
	scanf("%d %d", &N, &K);

	for (C = i = 0; i < N; i++)
	{
		scanf("%d", &V[i]);
		C += V[i];
	}

	li = 1; ls = C;
	while (li <= ls)
	{
		S = (li + ls) >> 1;

		T = 0; Cc = S + 1;
		for (i = 0; i < N; i++)
		{
			if (V[i] > S)
			{
				T = K + 1;
				break;
			}

			if (Cc + V[i] <= S)
				Cc += V[i];
			else
			{
				T++;
				Cc = V[i];
			}
		}
		
		if (T <= K)
			C = S, ls = S - 1;
		else
			li = S + 1;
	}

	freopen("transport.out", "w", stdout);
	printf("%d\n", C);

	return 0;
}