Cod sursa(job #558571)

Utilizator attila3453Geiszt Attila attila3453 Data 17 martie 2011 12:47:32
Problema Transport Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <stdio.h>
#include <fstream>

using namespace std;

int a[16001];
int st, dr, n, k, i, j, m, cc;

bool ok(int c)
{
	cc ^= cc;
	
	j = 1;
	
	for(i = 1;i <= n;i++)
	{
		if(a[i] + cc <= c)
			cc+=a[i];
		else
		{
			//j++;
			j = i;
			cc=a[i];
		}
		
		if(j>k)
			return false;
	}
	
	return true;
}

int main()
{
	freopen("transport.in", "r", stdin);
	freopen("transport.out", "w", stdout);
	
	scanf("%d %d", &n, &k);
	
	for(i = 1;i <= n;i++)
	{
		scanf("%d", a + i);
		
		st = max(st, a[i]);
		
		dr += a[i];
	}
	
	while(st <= dr)
	{
		m = st + (dr - st) / 2;
		
		if(ok(m))
			dr = m - 1;
		else
			st = m + 1;
	}
	printf("%d", st);
}