Pagini recente » Cod sursa (job #1921299) | Cod sursa (job #2842251) | Cod sursa (job #3030041) | Cod sursa (job #259036) | Cod sursa (job #2891541)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
const int kV = 200;
const int kG = 75000;
int f[1 + kV], dp[1 + kG], last[1 + kG];
void testCase() {
int n, g;
fin >> n >> g;
for (int i = 0; i < n; ++i) {
int x;
fin >> x;
f[x] += 1;
}
for (int i = 1; i <= g; ++i) {
dp[i] = -1;
}
for (int w = kV; w > 0; --w) {
if (f[w]) {
for (int wt = g - w; wt >= 0; --wt) {
if (dp[wt] != -1) {
for (int i = 1, W = wt + w; i <= f[w] && W <= g; ++i, W += w) {
if (dp[W] != -1) {
break;
}
dp[W] = dp[wt] + i;
last[W] = w;
}
}
}
}
}
for (int wt = g; wt >= 0; --wt) {
if (dp[wt] != -1) {
fout << wt << ' ' << dp[wt] << '\n';
while (wt) {
fout << last[wt] << '\n';
wt -= last[wt];
}
return;
}
}
}
int main() {
int tests = 1;
for (int tc = 0; tc < tests; ++tc) {
testCase();
}
fin.close();
fout.close();
return 0;
}