Cod sursa(job #616520)

Utilizator cioboata.iCioboata Ioan Liviu cioboata.i Data 12 octombrie 2011 19:40:02
Problema Submultimi Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include<cstdio>

int n,sol[25],v[25],s,nr;
bool tr[515];

void afisare(int p)
{
	int i;
	for(i=1;i<=s;i++)
		if(tr[i]==true)
			nr++;
	//printf("%d\n",nr);
	return ;
}

void umplere_traista(int val)
{
	int i;
	for(i=0;i<=s-val;i++)
		if(tr[i])
			tr[i+val]=true;
	return ;
}

void bkt(int p)
{
	int i,j;
	bool trc[515];
	if(p>1)
		afisare(p-1);
	for(i=sol[p-1]+1;i<=n;i++)
	{
		sol[p]=i;
		for(j=1;j<=s;j++)
			trc[j]=tr[j];
		umplere_traista(v[sol[p]]);
		bkt(p+1);
		for(j=1;j<=s;j++)
			tr[j]=trc[j];
	}
	return ;
}



int main()
{
	freopen("monezi.in","r",stdin);
	freopen("monezi.out","w",stdout);
	int i;
	scanf("%d%d",&n,&s);
	for(i=1;i<=n;i++)
		scanf("%d",&v[i]);
	tr[0]=true;
	bkt(1);
	printf("%d",nr);
	return 0;
}