Cod sursa(job #502169)

Utilizator skullLepadat Mihai-Alexandru skull Data 17 noiembrie 2010 22:29:30
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <stdio.h>
using namespace std;
#define pt(i) (1<<(i))
#define nmax 16005
#define inf 16001*16001

int n, k, z, rez;
int st[nmax];

int ok ( int x )
{
	int i, y, j = 1;
	for (i = 1; i <= k && j<n+1; ++i)
	{
		y = x;
		while (st[j] <= y && j<n+1) { y-=st[j]; j++; }
	}
	if (j <= n) return 1;
	return 0;
}
	
int main ()
{
	int i;
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%d %d ", &n, &k);
	for (i = 1; i <= n; ++i)
		scanf("%d ", &st[i]);
	z = 0;
	for (i = 30; i >= 0; --i)
		if (z+pt(i)<=inf && ok (z+pt(i)) )
			z = z + pt(i);
	printf("%d", z+1);
	return 0;
}