Cod sursa(job #217649)

Utilizator razvi9Jurca Razvan razvi9 Data 29 octombrie 2008 11:24:29
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<cstdio>
#include<cstring>
#include<deque>
int n,g,i,j,a[1<<18],v[20],max;
std::deque<int> x1,x2;

int main()
{
	freopen("zebughil.in","r",stdin);
	freopen("zebughil.out","w",stdout);
	for(int xyz = 1; xyz <= 3; xyz++)
	{
		scanf("%d %d",&n,&g);
		max=(1<<n)-1;
		for(i=1;i<=n;i++)
			scanf("%d",&v[i]);
		memset(a,-1,sizeof(a));
		a[0]=g;
		i=1;
		x1.clear();
		x2.clear();
		x1.push_back(0);
		while(a[max] == -1)
		{
			if(x1.size() == 0)
			{
				memset(a,-1,sizeof(a));
				for(int k = 0; k<x2.size();k++)
				{
					x1.push_back(x2[k]);
					a[x2[k]]=g;
				}
				x2.clear();
				i++;
			}
			while(x1.size())
			{
				j = x1[0];
				x1.pop_front();
				x2.push_back(j);
				for(int k=1;k<=n;k++)
					if(!( j & (1<<(k-1))) && a[j]>=v[k])
						if(a[j]-v[k] > a[j+(1<<(k-1))])
						{
							a[j+(1<<(k-1))]=a[j]-v[k];
							x1.push_back(j+(1<<(k-1)));
						}
			}
		}		
		printf("%d\n",i);
	}
	return 0;
}