Pagini recente » Cod sursa (job #2314020) | Cod sursa (job #2404503) | Cod sursa (job #2500529) | Cod sursa (job #1601613) | Cod sursa (job #1885233)
#include<stdio.h>
#define G 75010
#define N 20001
#define INF 2000000000
struct lab{
int prev, minim;
} obj[G];
int v[N];
int main (){
FILE *in, *out;
in = fopen ("ghiozdan.in","r");
out = fopen ("ghiozdan.out","w");
int n,g,i,j,minim,maxim,nr,k;
fscanf(in,"%d%d",&n,&g);
for (i=1;i<=n;i++){
fscanf(in,"%d",&nr);
v[nr] ++;
}
//obj[i] = nr minim de obj care au greut i
for (i=1;i<=g;i++)
obj[i].minim = INF;
maxim = 0;
for (i=200;i>=1;i--){
if (v[i] != 0)
for (j=g-i;j>=0;j--)
if (obj[j].minim != INF)
for (k=1;k<=v[i] && j+k*i<=g && obj[j+i*k].minim == INF;k++)
if (obj[j+i*k].minim > obj[j].minim + k){
obj[j+i*k].minim = obj[j].minim + k;
obj[j+i*k].prev = i;
if (j+i*k > maxim)
maxim = j + i*k;
}
}
fprintf (out,"%d %d\n",maxim,obj[maxim].minim);
int poz = maxim;
while (poz != 0){
if (obj[poz].prev != 0)
fprintf (out,"%d\n",obj[poz].prev);
poz = poz - obj[poz].prev;
}
fclose (in);
fclose (out);
return 0;
}