Pagini recente » Cod sursa (job #2269941) | Cod sursa (job #3281747) | Cod sursa (job #2091956) | Cod sursa (job #3126440) | Cod sursa (job #2268104)
#include <cstdio>
#include <cstdlib>
#define FILE_IN "ghiozdan.in"
#define FILE_OUT "ghiozdan.out"
const int INF = 0x3f3f3f3f;
const int MAXG = 75000 + 16;
int Rucsac[MAXG], Prev[MAXG];
int N, G;
int main()
{
freopen(FILE_IN, "r", stdin);
freopen(FILE_OUT, "w", stdout);
scanf("%i %i", &N, &G);
Rucsac[0] = 0;
for(int i = 1; i <= G; ++i)
Rucsac[i] = INF;
while(N--)
{
int w;
scanf("%i", &w);
for(int i = G - w; i >= 0; --i)
if(Rucsac[i + w] > Rucsac[i] + 1)
{
Rucsac[i + w] = Rucsac[i] + 1;
if(!Prev[i + w])
Prev[i + w] = w;
}
}
int most = G;
while(Rucsac[most] == INF) most--;
printf("%i %i\n", most, Rucsac[most]);
while(most)
{
printf("%i\n", Prev[most]);
most -= Prev[most];
// gresit :/
}
return 0;
}