Cod sursa(job #350228)

Utilizator bogdanacmDrutu Bogdan bogdanacm Data 23 septembrie 2009 01:02:53
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;
 
#define pb push_back
#define INF 1000000

vector <int> A;
int N,K;

bool solve(int x)
{
	int sum,i,j=0;
	for (i=0;i<K;i++)
	{
		sum = 0;
		while (sum + A[j] <= x && j<N)
			sum += A[j++];
		if (j==N)
			return true;
	}
	return false;
}

int bin()
{
	int lo,hi,mid,last = -1;
	for (lo = 1, hi = 16000*16000; lo <= hi;)
	{
		mid = lo + (hi - lo) / 2;
		//printf("%d\n",mid);
		if (solve(mid))
		{
			last = mid;
			hi = mid - 1;
		}
		else 
			lo = mid + 1;
	}
	return last;
}

int main()
{
	int i,M,a,x;
	char buf[100];
	long sum=0;

	freopen("transport.in", "rt", stdin);
	freopen("transport.out", "wt", stdout);

	scanf("%d %d",&N,&K);

//	printf("%d %d\n",N,K);
	for (i=0;i<N;i++)
	{
		scanf("%d",&a);
		A.pb(a);
	}

	printf("%d\n",bin());
	return 0;
}