Cod sursa(job #609782)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 23 august 2011 12:17:48
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<stdio.h>

int N;
int A[16001];
int sum;
int K;
int MAX;
int MAX2;
int nr;

int verif(int sum)
{
	int nr = 0;
	MAX = 0;
	int a;
	for(int i=1;i<=N;nr ++)
	{
		a = 0;
		for(i;i<=N && a+A[i]<=sum;a += A[i++]);
		if(MAX<a)
			MAX = a;
	}
	return nr;
}

int bsearch(int li,int ls)
{
	if(li<=ls)
	{
		int nr = verif((li+ls)/2);
		if(nr <= K)
		{
			MAX2 = MAX;
			bsearch(li,(li+ls)/2-1);
		}
		else
			bsearch((li+ls)/2+1,ls);
	}
}

int main()
{
	FILE *f = fopen("transport.in","r");
	FILE *g = fopen("transport.out","w");
	
	fscanf(f,"%d %d",&N,&K);
	for(int i=1;i<=N;i++)
	{
		fscanf(f,"%d ",&A[i]);
		sum += A[i];
		if(A[i]>MAX)
			MAX = A[i];
	}
	bsearch(MAX,sum);
	fprintf(g,"%d",MAX2);
	
	fclose(g);
	fclose(f);
	return 0;
}