Cod sursa(job #1197951)

Utilizator octav1234Pocola Tudor Octavian octav1234 Data 14 iunie 2014 10:35:49
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <cstdio>
using namespace std;
FILE *fi=fopen("transport.in","r");
FILE *fo=fopen("transport.out","w");

int i,n,k;
int A[16001];
int mx,s;

bool test(int val)
{
	int i;
	int s=0;
	int nr=1;
	for(i=1;i<=n;i++)
		if(A[i]+s<=val)
			s+=A[i];
		else
		{
			s=A[i];
			nr++;
		}
	if(nr<=k)
		return true;
	return false;
}

int bs(int st,int dr)
{
	int m;
	if(st==dr)
		return st;
	m=(st+dr)/2;	
	if(test(m))
		return bs(st,m);
	return bs(m+1,dr);
}

int main()
{
	fscanf(fi,"%d%d",&n,&k);
	for(i=1;i<=n;i++)
	{
		fscanf(fi,"%d",&A[i]);
		s+=A[i];
		if(A[i]>mx)
			mx=A[i];
	}
	fprintf(fo,"%d\n",bs(mx,s));
	fclose(fi);
	fclose(fo);
	return 0;
}