Pagini recente » Cod sursa (job #878473) | Cod sursa (job #1945480) | Cod sursa (job #1169234) | Cod sursa (job #533956) | Cod sursa (job #2121262)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("ghiozdan.in");
ofstream cout ("ghiozdan.out");
const int INF = 1e9;
struct Q_obj {
int nr, type;
};
int main () {
int n, g;
cin >> n >> g;
vector < int > dp (g + 1, INF), nr_obj (201);
for (int i = 1; i <= n; ++ i) {
int x;
cin >> x;
++ nr_obj[x];
}
vector < vector < Q_obj > > sol (g + 1);
dp[0] = 0;
for (int i = 200; i >= 1; -- i) {
if (not nr_obj[i]) {
continue;
}
for (int j = g; j >= 0; -- j) {
if (dp[j] == INF) {
continue;
}
int k = min ((g - j) / i, nr_obj[i]);
if (dp[j] + k < dp[j + k * i]) {
dp[j + k * i] = dp[j] + k;
sol[j + k * i] = sol[j];
sol[j + k * i].push_back ({k, i});
}
}
}
int ans;
for (int i = g; i >= 0; -- i) {
if (dp[i] != INF) {
ans = i;
break;
}
}
cout << ans << ' ' << dp[ans] << '\n';
for (int i = (int) sol[ans].size () - 1; i >= 0; -- i) {
while (sol[ans][i].nr --) {
cout << sol[ans][i].type << '\n';
}
}
}