Cod sursa(job #408855)

Utilizator alexeiIacob Radu alexei Data 3 martie 2010 11:52:29
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>
#define GMAX 75001

int P[GMAX],V[201],T[GMAX];
//o prima versiune..
int main()
{
	freopen("ghiozdan.in","r",stdin);
	freopen("ghiozdan.out","w",stdout);
	
	int N,G;
	scanf("%d%d",&N,&G);
	
	int i,M1=-1,M2=-1,a1;
	for(i=1; i<=N; ++i)
	{
		scanf("%d\n",&a1);
		++V[a1];
		if( a1>M1 ) M1=a1;
	}
	
	int j,k,ns;
	for( i=M1; i; --i )
	{
		if( V[i] )
		{
			for( j=G-i; j>=0; --j )
			{
				if( P[j] || !j )
				{
					for( k=1; k<=V[i]; ++k )
					{
						ns=j+i*k;
						if( ns<=G && !P[ns] )
						{
							P[ns]=P[j+i*(k-1)]+1;
							T[ns]=i;
							if( ns>M2 ) M2=ns;
						}
						else
							break;
					}
				}
			}
		}
	}
	
	printf("%d %d\n",M2,P[M2]);
	
	while( M2 )
	{
		printf("%d\n",T[M2]);
		M2-=T[M2];
	}
	
	return 0;
}