Pagini recente » Cod sursa (job #589234) | Cod sursa (job #289553) | Cod sursa (job #55027) | Cod sursa (job #3158629) | Cod sursa (job #3173829)
#include <bits/stdc++.h>
#include <stdexcept>
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("sse,avx,fma,avx2,bmi,bmi2,lzcnt,popcnt")
using namespace std;
void solve() {
const int weight = 200;
int n, g;
cin >> n >> g;
vector<int> freq(1 + weight, 0);
for (int i = 0, x; i < n; ++i) {
cin >> x;
++freq[x];
}
vector<pair<int, int>> dp(1 + g, {0, 0});
dp[0] = {0, 1};
for (int w = weight; w > 0; --w) {
if (freq[w] == 0)
continue;
for (int i = 0; i + w <= g; ++i) {
if (dp[i + w].second || dp[i].second == 0)
continue;
if (dp[i].first == w && dp[i].second != freq[w]) {
dp[i + w] = {w, dp[i].second + 1};
} else if (dp[i].first != w) {
dp[i + w] = {w, 1};
}
}
}
int best = 0;
for (int i = g; i > 0; --i)
if (dp[i].second) {
best = i;
break;
}
vector<int> ans;
for (int curr = best; curr; curr = curr - dp[curr].first * dp[curr].second)
for (int i = 0; i < dp[curr].second; ++i)
ans.push_back(dp[curr].first);
cout << best << ' ' << ans.size() << '\n';
for (int x : ans)
cout << x << '\n';
}
int main() {
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
int t = 1;
// cin >> t;
while (t--)
solve();
return 0;
}