Pagini recente » Cod sursa (job #325467) | Cod sursa (job #1408691) | Cod sursa (job #697061) | Cod sursa (job #209153) | Cod sursa (job #2121558)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("ghiozdan.in");
ofstream cout ("ghiozdan.out");
const int INF = 1e9;
int main () {
int n, g;
cin >> n >> g;
vector < int > dp (g + 1, INF), nr_obj (201), pre (g + 1);
for (int i = 1; i <= n; ++ i) {
int x;
cin >> x;
++ nr_obj[x];
}
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 mx = min (nr_obj[i], (g - j) / i);
for (int k = 1; k <= mx; ++ k) {
if (dp[j + k * i] != INF) {
break;
}
if (dp[j] + k < dp[j + i * k]) {
dp[j + i * k] = dp[j] + k;
pre[j + i * k] = i;
}
}
}
}
int ans;
for (int i = g; i >= 0; -- i) {
if (dp[i] != INF) {
cout << i << ' ' << dp[i] << '\n';
while (pre[i]) {
cout << pre[i] << '\n';
i -= pre[i];
}
break;
}
}
}