Cod sursa(job #393099)

Utilizator pykhNeagoe Alexandru pykh Data 8 februarie 2010 21:21:55
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>

const char in[]="ghiozdan.in";
const char out[]="ghiozdan.out";

const int Gmax=75002;

int f[205], v[Gmax], n, w, max, l[Gmax];

int main()
	{int i, j, k, x, y;
		freopen(in,"r",stdin);
		freopen(out,"w",stdout);
			scanf("%d %d", &n, &w);
		for(i=1;i<=n;++i){
			scanf("%d", &f[0]);
			++f[f[0]];
			if(f[0]>max)max=f[0];
		}
		f[0]=0;
		for(i=max;i>=1;--i)
			if(f[i])
				for(k=w-i;k>=0;--k)
					if(v[k] || !k)
						for(j=1;j<=f[i];++j)
							if(k+i*j<=w && !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=w;!v[i];--i);
				printf("%d %d\n", i, v[i]);
		//for(j=i,k=v[i];k;--j)
			//if(v[j]==k)printf("%d\n",l[j]),--k;
    x=i;
    y=l[x];
    while(v[i]){
        printf("%d\n",x-y);
        v[i]--;
        x=y;
        y=l[y];
    }
		
		
		return 0;
	}