Pagini recente » Cod sursa (job #764417) | Istoria paginii runda/foxter | Istoria paginii utilizator/dmtrcata | Cod sursa (job #1222966) | Cod sursa (job #587089)
Cod sursa(job #587089)
#include <cstring>
#include <fstream>
#include <algorithm>
using namespace std;
int N, G;
int V[202], Minob[75002];
int T[75002];
int Gmax, Nmin;
int main()
{
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
fin >> N >> G;
for (int i = 1, aux; i <= N; ++i)
{
fin >> aux;
++V[aux];
}
memset(Minob, -1, sizeof(Minob));
Minob[0] = 0;
for (int i = 200; i >= 1; --i)
{
if (V[i] == 0) continue;
for (int j = G - i; j >= 0; --j)
if (Minob[j] != -1)
for (int k = 1; k <= V[i]; ++k)
{
if (j + i * k > G) break;
if (Minob[j + i * k] != -1) break;
Minob[j + i * k] = Minob[j + i * (k - 1)] + 1;
T[j + i * k] = j + i * (k - 1);
if (j + i * k > Gmax)
{
Gmax = j + i * k;
Nmin = Minob[j + i * k];
}
else if (j + i * k == Gmax)
Nmin = min(Nmin, Minob[j + i * k]);
}
}
fout << Gmax << ' ' << Nmin << '\n';
int now = Gmax;
while (now)
{
fout << now - T[now] << '\n';
now = T[now];
}
fin.close();
fout.close();
}