Cod sursa(job #484019)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 11 septembrie 2010 16:13:51
Problema Ghiozdan Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#define Nmax 20002
#define Gmax 75002
#define Vmax 202

int Nr_min[Gmax],HP[Gmax],V[Nmax],Cnt[Vmax];
int N,G,vmax;

int main(){
	int i,j,k;
	freopen("ghiozdan.in","r",stdin);
	freopen("ghiozdan.out","w",stdout);
	scanf("%d%d",&N,&G);
	for(i=1;i<=N;++i){
		scanf("%d",&V[i]);
		Cnt[V[i]]++;
		vmax=vmax>V[i] ? vmax:V[i];
	}
	
	Nr_min[0]=1;
	for(i=vmax;i>=1;--i)
		if( Cnt[i] )
		for(j=G-i;j>=0;--j)
			if( Nr_min[j] )
				for(k=1;k<=Cnt[i] && j+i*k<=G ;++k)
					if( !Nr_min[j+i*k] ){
						Nr_min[j+i*k]=Nr_min[j]+k;
						HP[j+i*k]=j+i*(k-1);
					}
	
	while( !Nr_min[G] ) --G;
	printf("%d %d\n",G,Nr_min[G]-1);
	while( G ){
		printf("%d\n",G-HP[G]);
		G=HP[G];
	}
	
	fclose(stdin); fclose(stdout);
	return 0;
}