Pagini recente » Istoria paginii runda/testround6/clasament | Cod sursa (job #1258315) | Cod sursa (job #2934056) | Cod sursa (job #2045932) | Cod sursa (job #2253336)
#include <bits/stdc++.h>
const int G = 211, N = 75011;
int f[G], sol[N], str[N];
int mx(int x, int y) {
if(x > y)
return x;
return y; }
int main() {
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
int n, s, g, m = 0, x;
scanf("%d %d", &n, &g);
for (int i = 1; i <= n; i++) {
scanf("%d", &x);
f[x]++;
m = mx(x, m); }
sol[0] = 1;
s = 0;
for (int i = m; i >= 0; i--)
if (f[i] > 0)
for (int j = g - i; j >= 0; j--)
if (sol[j] > 0)
for (int l = 1; l <= f[i] && j + l * i <= g && sol[j + l * i] == 0; ++l) {
sol[j + l * i] = sol[j + (l - 1) * i] + 1;
str[j + l * i] = i;
if (j + l * i > s)
s = j + l * i; }
sol[s]--;
printf("%d %d\n", s, sol[s]);
for (int i = s; i; i -= str[i])
printf("%d\n", str[i]);
return 0; }