Pagini recente » Cod sursa (job #2894387) | Cod sursa (job #3139460) | Cod sursa (job #427293) | Cod sursa (job #65383) | Cod sursa (job #594289)
Cod sursa(job #594289)
# include <cstdio>
const char *FIN = "ghiozdan.in", *FOU = "ghiozdan.out" ;
const int MAX_N = 75005, MAX_G = 205 ;
int cnt[MAX_G], poz[MAX_N], SOL[MAX_N] = {1} ;
int N, G, max, gmax;
inline int maxim (int A, int B) {
return (A > B ? A : B) ;
}
int main (void) {
freopen (FIN, "r", stdin) ;
freopen (FOU, "w", stdout) ;
scanf ("%d %d", &N, &G) ;
for (int i = 1, X; i <= N; ++i) {
scanf ("%d", &X) ;
++cnt[X], max = maxim (max, X);
}
for (int i = max; i ; --i) {
if (cnt[i]) {
for (int j = G - i; j + 1; --j) {
if (SOL[j]) {
for (int k = 1; k <= cnt[i] && j + i * k <= G && SOL[j + i * k] == 0; ++k) {
SOL[j + i * k] = 1 + SOL[j + i * (k - 1)];
poz[j + i * k] = i;
gmax = maxim (gmax, j + i * k) ;
}
}
}
}
}
printf ("%d %d\n", gmax, --SOL[gmax]) ;
for (int i = gmax; i ; i -= poz[i])
printf ("%d\n", poz[i]) ;
}