Cod sursa(job #537059)

Utilizator siminescuPaval Cristi Onisim siminescu Data 19 februarie 2011 22:53:05
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<fstream>
using namespace std;

ifstream f("zebughil.in");
ofstream g("zebughil.out");

int tir[1<<18][18],N,G,gr[18];

void rezolva()
{
	int i,j,b,k,n;
	n=1<<N;
	for(i=0;i<=n;++i)
		for(j=0;j<=N;++j) tir[i][j]=-1;
	tir[0][0]=0;
	for(i=0;i<=n;++i)
		for(j=0;j<=N;++j)
			if(tir[i][j]!=-1)
			{
				for(b=0;b<=N && i+(1<<b)<=n;++b)
					if((i&(1<<b))==0)
					{
						k=i+(1<<b);
						if(gr[b]<=tir[i][j])
						{
							if(tir[k][j]<tir[i][j]-gr[b])
								tir[k][j]=tir[i][j]-gr[b];
						}
						else if(tir[k][j+1]<G-gr[b])
							tir[k][j+1]=G-gr[b];
					}
			}
	--n;
	for(j=1;j<=N;++j)
		if(tir[n][j]!=-1)
		{
			g<<j<<'\n';
			return;
		}
}
int main()
{
	int T=3,i;
	for(;T;--T)
	{
		f>>N>>G;
		for(i=0;i<N;++i) f>>gr[i];
		rezolva();
	}
}