Pagini recente » Cod sursa (job #2063610) | Cod sursa (job #3164406) | Cod sursa (job #1886150) | Cod sursa (job #2690723) | Cod sursa (job #2891538)
#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; wt + i * w <= g && i <= f[w]; ++i) {
if (dp[wt + i * w] != -1) {
break;
}
dp[wt + i * w] = dp[wt] + i;
last[wt + i * 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;
}