Pagini recente » Cod sursa (job #1563035) | Cod sursa (job #1722002)
#include<cstdio>
#define MAXG 75010
#define MAXVAL 210
#define INF 1000000000
using namespace std;
int vc[MAXVAL],dad[MAXG],seen[MAXG];
void Reconstitute(int x,int current){
if(x==0){
printf("%d\n",current);
return;
}
Reconstitute(x-dad[x],current+1);
printf("%d\n",dad[x]);
}
int main(){
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
int n,g,i,j,k,x,best;
scanf("%d%d",&n,&g);
for(i=1;i<=n;i++){
scanf("%d",&x);
vc[x]++;
}
dad[0]=-1;
for(i=200;i>=1;i--){
for(j=0;j<i;j++){
best=-INF;
for(k=i+j;k<=g;k+=i){
if(dad[k-i]!=0)
best=k-i;
if(k-best<=i*vc[i])
seen[k]=1;
else
seen[k]=0;
}
}
for(j=1;j<=g;j++)
if(dad[j]==0&&seen[j]==1)
dad[j]=i;
}
best=0;
for(i=1;i<=g;i++)
if(dad[i]!=0)
best=i;
printf("%d ",best);
Reconstitute(best,0);
return 0;
}