Pagini recente » Cod sursa (job #524547) | Cod sursa (job #2669585) | Cod sursa (job #108239) | Cod sursa (job #1574217) | Cod sursa (job #1539243)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *in, *out;
const int N_max = 20000;
const int G_max = 75000;
int weight[N_max+1];
int sol[G_max+1]; // sol[i] = NR MINIM DE OBIECTE AVAND GREUTATEA i
int last[G_max+1];
int N, G, weight_max;
void calcul(int x)
{
if(x - weight[ last[x] ] == 0) {printf("%d\n", weight[ last[x] ]); return;}
calcul(x - weight[ last[x] ]);
printf("%d\n", weight[ last[x] ]);
}
int main()
{
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
int i, j;
scanf("%d %d", &N, &G);
for(i = 1; i <= N; i++)
scanf("%d", &weight[i]);
sort(weight+1, weight+N+1);
last[0] = -1;
for(i = 1; i <= N; i++)
for(j = G - weight[i]; j >= 0; j--)
{
if(last[j] != 0)
{ if(last[j + weight[i]] == 0 || sol[j + weight[i]] > sol[j] + 1)
{
sol[j + weight[i]] = sol[j] + 1;
last[j + weight[i]] = i;
if(weight_max < j + weight[i])
weight_max = j + weight[i];
}
if(i == N) break;
}
}
cout << weight_max << " " << sol[weight_max] <<'\n';
/*for(int i = 1; i <= G; i++) cout << i <<" ";
cout <<'\n';
for(int i = 1; i <= G; i++) cout << sol[i] <<" ";
cout << '\n';
for(int i = 1; i <= G; i++) cout << last[i] <<" ";*/
calcul(weight_max);
return 0;
}