Cod sursa(job #1731733)

Utilizator andreiSevastreAndrei Sevastre andreiSevastre Data 19 iulie 2016 18:46:21
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <stdio.h>

using namespace std;
int v[16001],n,k;
int verificare (int cap)
{
	int s=0;
	int transport=0;
	for(int i=1; i<=n; i++)
	{
		s+=v[i];
		if(s > cap)
		{
			transport++;
			if(transport > k)
			{
				break;
			}
			s=v[i];
		}
	}
	if( transport < k && s <= cap )
	{
		return 1;
	}
	return 0;
}
	
int main ()
{
	int sol;
	freopen("transport.in" , "r", stdin);
	freopen("transport.out", "w", stdout);
		
	scanf("%d%d", &n, &k);
	
	int max=0,suma=0;
	
	for(int i=1; i<=n; i++)
	{
		scanf("%d", &v[i]);
		if(v[i] > max) max= v[i];
		suma+=v[i];
	}
	
	int ls=max;
	int ld=suma;
	int mid;
	
	while( ls <= ld)
	{
		mid=(ls+ld)/2;
		if( verificare(mid))
		{
			sol=mid;
			ld=mid-1;
		}
		else
		{
			ls=mid+1;
		}
	}
	
	printf("%d\n", sol);
return 0;
}