Pagini recente » Cod sursa (job #2342563) | Cod sursa (job #3130081) | Cod sursa (job #2932172) | Cod sursa (job #3005724) | Cod sursa (job #19275)
Cod sursa(job #19275)
#include <stdio.h>
#define G 201
#define G_MAX 75001
int n,g,v[G],a[G_MAX],t[G_MAX],s[G_MAX];
void citire(){
int i,x;
FILE *fin=fopen("ghiozdan.in","r");
fscanf(fin,"%d %d",&n,&g);
for (i=1;i<=n;i++){
fscanf(fin,"%d",&x);
v[x]++;
}
fclose(fin);
}
void prelucrare(){
int i=1,j,k;
while (i<=G){
if (v[i]){
for (j=g-i;j>=0;j--)
if (a[j])
for (k=1;(k<=v[i])&&(j+k*i<=g);k++)
if ((a[j+k*i]==0)||(a[j+k*i]>a[j]+k)){
a[j+k*i]=a[j]+k;
t[j+k*i]=j;
s[j+k*i]=i;
}
for (k=1;(k<=v[i])&&(k*i<=g);k++)
if (a[k*i]==0||a[k*i]>k){
a[k*i]=k;
s[k*i]=i;
}
}
i++;
}
}
void afisare(){
int i,j;
FILE *fout=fopen("ghiozdan.out","w");
for (i=g;!a[i];i--);
fprintf(fout,"%d %d\n",i,a[i]);
while (t[i]!=0){
for (j=1;j<=(i-t[i])/s[i];j++)
fprintf(fout,"%d\n",s[i]);
i=t[i];
}
for (j=1;j<=i/s[i];j++)
fprintf(fout,"%d\n",s[i]);
fclose(fout);
}
int main(){
citire();
prelucrare();
afisare();
return 0;
}