Pagini recente » Cod sursa (job #868046) | Cod sursa (job #1029010) | Cod sursa (job #1379918) | Cod sursa (job #2192868) | Cod sursa (job #3245508)
#include <stdio.h>
#include <stdlib.h>
#define MAXG 75000
#define MAXGR 200
int frecv[MAXGR+1];
int dp[MAXG+1],sol[MAXG+1];
FILE *fin,*fout;
int maxs,n,g,maxim,x;
void openFiles() {
fin=fopen("ghiozdan.in","r");
fout=fopen("ghiozdan.out","w");
}
void closeFiles() {
fclose(fin);
fclose(fout);
}
int max(int a,int b) {
return a>b?a:b;
}
void readInput() {
maxim=0;
fscanf(fin,"%d%d",&n,&g);
for(int i=0; i<n; i++) {
fscanf(fin,"%d",&x);
frecv[x]++;
maxim=max(maxim,x);
}
}
void printSol() {
for(int i=maxs; i>0; i-=sol[i]) {
fprintf(fout,"%d\n",sol[i]);
}
}
void findSol() {
dp[0]=1;
for(int i=maxim; i>0; i--) {
if(frecv[i]>0) {
for(int j=g-i; j>=0; j--) {
int k=1;
if(dp[j]>0) {
while(k<=frecv[i]&&j+k*i<=g&&dp[j+k*i]==0) {
dp[j+k*i]=dp[j+(k-1)*i]+1;
sol[j+k*i]=i;
if(j+k*i>maxs) {
maxs=j+k*i;
}
k++;
}
}
}
}
}
fprintf(fout,"%d %d\n",maxs,dp[maxs]-1);
printSol();
}
int main() {
openFiles();
readInput();
findSol();
closeFiles();
return 0;
}