Cod sursa(job #18120)

Utilizator DorinOltean Dorin Dorin Data 18 februarie 2007 09:41:49
Problema Ghiozdan Scor 54
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 0.82 kb
# include <stdio.h>

# define input "ghiozdan.in"
# define output "ghiozdan.out"

# define max 75019

long n,a[max],nr[max],g,i,j,ant[max],x,m,val;

int main()
{
	freopen(input,"r",stdin);
	freopen(output,"w",stdout);

	scanf("%ld%ld",&n,&g);

	a[0] = 1;
	m = 0;

	for(i = 1;i<=n;i++)
	{
		scanf("%ld",&x);
		for(j = m;j>=0;j--)
		{
			if(a[j] && j+x<=g)
			{
				if(j+x>m)
					m  = j+x;
				if(!a[j+x])
				{
					a[j+x] = 1;
					ant[j+x] = j;
					nr[j+x] = nr[j]+1;
				}
				else
					if(nr[j+x]>nr[j]+1)
					{
						ant[j+x] = j;
						nr[j+x] = nr[j]+1;
					}


			}
		}
	}
	for(i=g;!a[i];i--);
	printf("%ld %ld\n",i,nr[i]);
	val = nr[i];
	while(i)
	{
		printf("%ld\n",i-ant[i]);
		i = ant[i];
		--val;
	}
	while(val)
	{
		printf("0\n");
		--val;
	}

    return 0;
}