Cod sursa(job #469451)

Utilizator unknownliviuMaria Liviu Valentin unknownliviu Data 7 iulie 2010 18:54:12
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int n,k,v[16010],sum;//2^14
//tre sa folosesc vector de sume partiale
/*
caut numere dn ce in ce mai mari
pt care se indeplinesc conditiile
*/

void read()
{
	sum=0;
	in>>n>>k;
	for(int i=1;i<=n;i++)
	{
		in>>v[i];
		sum+=v[i];
	}
}
bool suma(int x)//merge impartit in x
{
	int q=0,s=0,d=1,i=1;
	while(i<=k)
	{
		s=0;
		while(d<=n)
		{
			if(s+v[d]<=x)
			{	
				s+=v[d];
				d++;
			}
			else
				break;
		}
	q+=s;
	i++;
	}
	if(q<sum)
		return false;
	return true;
}
int main()
{
	read();
	int j,p=1<<14;
	for(j=0;p!=0;p>>=1)
		if(suma(j+p)==false)
			j+=p;
		out<<j+1;
	return 0;
}