Cod sursa(job #199604)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 19 iulie 2008 19:37:33
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#define INF 30000
#define Gmax 75002
#define N 20005
int g[N],f[201],n,G,v[Gmax],l[Gmax];
void citeste(){
	int x;
	freopen("ghiozdan.in","r",stdin);
	freopen("ghiozdan.out","w",stdout);
	scanf("%d%d",&n,&G);
	for(int i=1;i<=n;i++){
		scanf("%d",&x);
		f[x]++;
	}
}
void solve(){
	int i,j,k,x,y;
	for(i=200;i>=1;i--)
		for(k=G-i;k>=0;k--)
				if(v[k] || !k)
					for(j=1;j<=f[i];j++)
						if(k+i*j<=G && !v[k+i*j]){
							v[k+i*j]=v[k+i*(j-1)]+1;
							l[k+i*j]=k+i*(j-1);
						}
						else break;
	for(i=G;i>=1;i--)
		if (v[i]){
			printf("%d %d\n",i,v[i]);
			break;
		}
	x=i;
	y=l[x];
	while(v[i]){
		printf("%d\n",x-y);
		v[i]--;
		x=y;
		y=l[y];
	}
}
int main(){
	citeste();
	solve();
	return 0;
}