Cod sursa(job #779269)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 17 august 2012 12:41:47
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.82 kb
#include<stdio.h>

#define maxg 200
#define maxG 75005
#define b 50

using namespace std;

FILE*f=fopen("ghiozdan.in","r");
FILE*g=fopen("ghiozdan.out","w");

int n,G;
int fr[maxg+1],D[maxG],T[maxG];

int main () {
	
	fscanf(f,"%d %d",&n,&G);
	int x;
	for ( int i = 1 ; i <= n ; ++i ){
		fscanf(f,"%d",&x);
		++fr[x];
	}
	
	D[0] = 1;
	for ( int i = 200 ; i >= 1 ; --i ){
		if ( !fr[i] )	continue ;
		
		for ( int j = G-i ; j >= 0 ; --j ){
			if ( !D[j] )	continue ;
			
			for ( int k = 1 ; k <= fr[i] && !D[j+k*i] && j+k*i <= G ; ++k ){
				D[j+k*i] = D[j] + k;
				T[j+k*i] = i;
			}
		}
	}
	
	int u = 0;
	for ( int i = G ; i >= 0 ; --i ){
		if ( D[i] ){
			fprintf(g,"%d %d\n",i,D[i]-1);
			u = i;
			break ;
		}
	}
	while ( u ){
		fprintf(g,"%d\n",T[u]);
		u -= T[u];
	}
	
	fclose(f);
	fclose(g);
	
	return 0;
}