Cod sursa(job #372701)

Utilizator ilincaSorescu Ilinca ilinca Data 11 decembrie 2009 13:29:49
Problema Zebughil Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
#include <limits.h>

#define pmax (1<<17) + 5
#define inf INT_MAX - 5


int n, g, w, v [25], s [pmax];

void scan ()
{
	int i;
	scanf ("%d%d", &n, &g);
	for (i=1; i <= n; ++i) 
		scanf ("%d", &v [i]);
}

void back (int k, int sum, int b)
{
	if (b == n)
	{
		if (s [w] > s [k]+1) 
			s [w]=s [k]+1;
		return ;
	}	

	back (k, sum, b+1);
	if ((k & (1 << b)) && (sum + v [b+1] <= g))
			back (k ^ (1 << b), sum + v [b+1], b+1);
}

void zeb ()
{
	int k=1<<n;
	s [1]=inf;
	for (w=1; w < k; ++w, s [w]=inf) 
		back (w, 0, 0); //fprintf(stderr, "%d\n", s [w]); }
}

int main ()
{
	freopen ("zebughil.in", "r", stdin);
	freopen ("zebughil.out", "w", stdout);
	for (int i=1; i <= 3; ++i) 
	{
		scan ();
		zeb ();
		printf ("%d\n", s [(1 << n)-1]); 
	}
	return 0;
}