Cod sursa(job #928182)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 26 martie 2013 12:17:24
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<fstream>
using namespace std;
int n,G,g[17];
int best[132000];
//best[conf] la iteratia nrc = spatiul liber maxim pe care il am in ultimul camion folosit
//transportand bitii de 1 din conf cu nrc camioane
//best[conf]=-1 daca nu a fost inca vizitata,adica nu era posibila cu nrc-1 camioane

int main()
{
	int t,nrc,i,conf,lim;
	ifstream fin("zebughil.in");
	ofstream fout("zebughil.out");
	for(t=1;t<=3;t++)
	{
		fin>>n>>G;
		for(i=0;i<n;i++)
			fin>>g[i];
		lim=(1<<n);
		for(conf=0;conf<lim;conf++)
			best[conf]=-1;
		best[0]=G; //initial am un singur camion si nu transport pe nimeni,deci am liber G
		for(nrc=1;nrc<=n;nrc++)
		{
			for(conf=1;conf<lim;conf++)
			{
				if(best[conf]>=0) //daca am putut sa transport conf cu nrc-1 camioane,atunci acum am un camion nou liber
					best[conf]=G;
				else //n-am putut pana acum sa transport conf cu nrc-1 camioane
				{
					for(i=0;i<n;i++)
						if((conf&(1<<i))!=0)
							best[conf]=max(best[conf],best[conf-(1<<i)]-g[i]);
				}
			}
			if(best[lim-1]>=0) //daca am putut sa le transport pe toate,atunci am gasit nrc minim
			{
				fout<<nrc<<"\n";
				break;
			}
		}
	}
	fin.close();
	fout.close();
	return 0;
}