Cod sursa(job #495718)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 26 octombrie 2010 16:53:56
Problema Ghiozdan Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<algorithm>
#include<vector>
using namespace std;
#define N_MAX 20002
#define G_MAX 75002
#define si unsigned short int
unsigned int tata[G_MAX];
si dp[G_MAX];
si a[N_MAX];
unsigned int g,j,poz,aux;
si i,n,solsz;
si ss[202];
si aa[N_MAX],b[N_MAX];
bool t;
int main()
{
	freopen("ghiozdan.in","r",stdin);
	freopen("ghiozdan.out","w",stdout);

	scanf("%hd%d",&n,&g);
	for(i=1;i<=n;i++)
		scanf("%hd",&a[i]);
	
	sort(a+1,a+n+1);

	for(i=n;i>=1;i--)
	{
		t=1;
		for(j=g;j>=a[i];j--)
			if(dp[j-a[i]]&&dp[j]==0)
			{
				dp[j]=i;
				tata[j]=j-a[i];
				if(j==g)
				{
					t=0;
					break;
				}

			}
			dp[a[i]]=i;
		if(t==0)
			break;
	}

	for(j=g;j>=0;j--)
		if(dp[j])
		{
			poz=j;
			break;
		}
	
	printf("%d ",poz);	aux=poz;
	while(poz)
	{
		solsz++;
		poz=tata[poz];
	}
	printf("%d\n",solsz);
	poz=aux;
	while(poz)
	{
		printf("%d\n",a[dp[poz]]);
		poz=tata[poz];
	}

	return 0;
}