Cod sursa(job #695335)

Utilizator netedu_andreiFII Andrei Netedu netedu_andrei Data 28 februarie 2012 11:57:15
Problema Ghiozdan Scor 36
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>

long n,g,i,j,gmax,gmaxn,a[20001],viz[75001],gr[75001],poz[75000];
int main()
{
	freopen("ghiozdan.in","r",stdin);
	freopen("ghiozdan.out","w",stdout);
	scanf("%ld %ld",&n,&g);
	for(i=1;i<=n;i++)
	{
		scanf("%ld",&a[i]);

		for(j=0;j<=gmax;j++) viz[j]=0;
		if(gr[a[i]]>1||gr[a[i]]==0) 
		{
			gr[a[i]]=1;
			poz[a[i]]=-1;
			viz[a[i]]=1;
		}
		gmaxn=gmax;
		for(j=0;j<=gmaxn;j++)
		{
			if(viz[j]==0 && j+a[i]<=g && gr[j]>0) {
				viz[j]=1;
				if(gr[j+a[i]]>gr[j]+1 || gr[j+a[i]]==0) 
				{
					gr[j+a[i]]=gr[j]+1;
					poz[j+a[i]]=j;
					viz[j+a[i]]=1;
					if(j+a[i]>gmax) gmax=j+a[i];
				}
			}
		}
		
		if(a[i]>gmax) gmax=a[i];
	}
	for(i=g;i>=0;i--)
		if(gr[i]>0)
		{
			printf("%ld %ld\n",i,gr[i]);
			while(poz[i]!=-1)
			{
				printf("%ld\n",a[i]);
				i=poz[i];
			}
			break;
		}
	return 0;
}