Pagini recente » Monitorul de evaluare | Cod sursa (job #772046) | Cod sursa (job #1643463) | Cod sursa (job #276218) | Cod sursa (job #393676)
Cod sursa(job #393676)
#include <cstdio>
const int N = 20001;
const int G_MAX = 75001;
const int INF = 2000000000;
int g[N];
int nr_min_obj[G_MAX];
int id_obj_prec[N];
int id_ultim_obj_i[G_MAX];
int n,g_max;
void deschidere()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
}
void citire()
{
scanf("%d%d",&n,&g_max);
for (int i = 1; i <= n; ++i)
scanf("%d",&g[i]);
}
void initializare_configuratii()
{
nr_min_obj[0] = 0;
for (int i = 1; i <= g_max; ++i)
nr_min_obj[i] = INF;
id_ultim_obj_i[0] = 0;
id_obj_prec[0] = 0;
}
void rucsac()
{
initializare_configuratii();
for (int id_obj = 1; id_obj <= n; ++id_obj)
for (int i = g_max - g[id_obj]; i >= 0; --i)
if (nr_min_obj[i] != INF)
if (nr_min_obj[i+g[id_obj]] > nr_min_obj[i] + 1)
{
nr_min_obj[i+g[id_obj]] = nr_min_obj[i] + 1;
id_ultim_obj_i[i+g[id_obj]] = id_obj;
id_obj_prec[id_obj] = id_ultim_obj_i[i];
}
}
void afisare_configuratie(int id_obj)
{
if (id_obj_prec[id_obj] != 0)
afisare_configuratie(id_obj_prec[id_obj]);
printf ("%d\n",g[id_obj]);
}
void afisare()
{
for (int i = g_max; i >= 0; --i)
if (nr_min_obj [i] != INF)
{
printf("%d %d\n",i,nr_min_obj[i]);
afisare_configuratie(id_ultim_obj_i[i]);
break;
}
}
int main()
{
deschidere();
citire();
rucsac();
afisare();
}