Pagini recente » Cod sursa (job #2973744) | Cod sursa (job #248855) | Rating Armina Moldovan (armina_moldovan) | Simulare 15a | Cod sursa (job #518544)
Cod sursa(job #518544)
#include <cstring>
#include <fstream>
#include <vector>
using namespace std;
int N, G;
int V[20010], Minob[75002];
int Tnow[75002];
int sol[20010];
int Gmax, Nmin;
int main()
{
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
fin >> N >> G;
for (int i = 1; i <= N; ++i)
fin >> V[i];
memset(Minob, -1, sizeof(Minob));
Minob[0] = 0;
for (int i = 1; i <= N; ++i)
{
for (int j = G - V[i]; j >= 0; --j)
if (Minob[j] != -1 && (Minob[j] + 1 < Minob[j + V[i]] || Minob[j + V[i]] == -1))
{
Minob[j + V[i]] = Minob[j] + 1;
Tnow[j + V[i]] = j;
if (j + V[i] >= Gmax)
{
Gmax = j + V[i], Nmin = Minob[j + V[i]];
sol[0] = 1;
sol[1] = V[i];
int now = j;
while (now != 0)
{
sol[++sol[0]] = now - Tnow[now];
now = Tnow[now];
}
}
}
}
fout << Gmax << ' ' << Nmin << '\n';
for (int i = 1; i <= sol[0]; ++i)
fout << sol[i] << '\n';
fin.close();
fout.close();
}