Cod sursa(job #18944)

Utilizator Binary_FireFlorin Pogocsan Binary_Fire Data 18 februarie 2007 15:08:30
Problema Ghiozdan Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#define fin  "ghiozdan.in"
#define fout "ghiozdan.out"
#define Smax 75001

int N,G,viz[Smax],min[Smax],next[Smax][2],sol;	//0-left , 1-right

int main() {
int i,j,a;
	freopen(fin,"r",stdin); freopen(fout,"w",stdout);
	scanf("%i%i",&N,&G);

	viz[0]=1;

	next[G][0]=0;
	next[G][1]=G;

	next[0][1]=G;
	next[0][0]=0;

	for (i=1;i<=N;++i) {

		scanf("%i",&a);

		for (j=G;j>=0;) {
				
			if (viz[j] && j+a<=G) {

				if (!viz[j+a]) {
					viz[j+a]=1;
					next[j+a][0]=j;
			       		next[j+a][1]=next[j][1];
					next[next[j][1]][0]=j+a;
					next[j][1]=j+a;	
				}

				if (min[j+a]>min[j]+1) min[j+a]=min[j]+1;
			}
			
			fprintf(stderr,"%i ",j);

			if (j==0) j=-1; 

			else j=next[j][0];
				
		}

	}

	for (j=1;j<=G;++j) fprintf(stderr,"%i %i\n",next[j][0],next[j][1]);

	for (j=G;viz[j]==0;--j);

	printf("%i %i\n",j,min[j]);

	fclose(stdin); fclose(stdout);

	return 0;
}