Pagini recente » Cod sursa (job #1460480) | Cod sursa (job #2772741) | Cod sursa (job #2561600) | Cod sursa (job #874273) | Cod sursa (job #779268)
Cod sursa(job #779268)
#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;
}