Pagini recente » Cod sursa (job #443163) | Cod sursa (job #1051104) | Cod sursa (job #501349) | Cod sursa (job #1932810) | Cod sursa (job #2505109)
#include <iostream>
#include <cstdio>
#include <cstring>
#define NMAX 20000
#define GMAX 75000
using namespace std;
int n, G, last_g;
int g[NMAX + 5], d[GMAX + 5], nobj[GMAX + 5], uz[GMAX + 5];
int main() {
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
scanf("%d %d", &n, &G);
last_g = 0;
d[0] = 1;
for(int i = 0; i <= G; i++)
nobj[i] = NMAX + 5;
nobj[0] = 0;
for(int i = 1; i <= n; i++) {
scanf("%d", &g[i]);
for(int j = min(last_g + g[i], G); j >= g[i]; j--)
if(d[j - g[i]] == 1) {
d[j] = 1;
if(nobj[j - g[i]] + 1 < nobj[j]) {
nobj[j] = nobj[j - g[i]] + 1;
uz[j] = g[i];
}
last_g = max(last_g, j);
}
}
printf("%d %d", last_g, nobj[last_g]);
for(int i = last_g; i > 0; i -= uz[i])
printf("%d\n", uz[i]);
return 0;
}