Pagini recente » Cod sursa (job #1642122) | Cod sursa (job #347162) | Cod sursa (job #1942656) | Cod sursa (job #2851354) | Cod sursa (job #3033123)
#include <bits/stdc++.h>
#define GMAX 75005
#define OBJMAX 205
using namespace std;
int freq[OBJMAX];
int dp[GMAX];
pair<int, int> sol[GMAX];
void print_sol(int i) {
cout << i << ' ' << dp[i] << '\n';
while (i) {
int s = sol[i].first * sol[i].second;
while (sol[i].second) {
--sol[i].second;
cout << sol[i].first << '\n';
}
i -= s;
}
}
void solve()
{
int n, g;
cin >> n >> g;
for (int i = 1, x; i <= n; ++i) {
cin >> x;
++freq[x];
}
for (int i = 200; i >= 1; --i) {
if (!freq[i])
continue;
for (int j = g - i; j >= 0; --j) {
if (!dp[j] && j)
continue;
for (int k = 1; k <= freq[i] && i * k + j <= g; ++k) {
if (dp[i * k + j])
break; // not optimal, more elements in this way
dp[i * k + j] = dp[j] + k;
sol[i * k + j] = {i, k};
}
}
}
for (int i = g; i > 0; --i) {
if (dp[i]) {
print_sol(i);
return;
}
}
}
int main()
{
freopen("input.in", "r", stdin);
freopen("output.out", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
int t = 1;
// cin >> t;
while(t--)
solve();
return 0;
}