Pagini recente » Cod sursa (job #2379394) | Cod sursa (job #607015) | Cod sursa (job #1443173) | Cod sursa (job #1516478) | Cod sursa (job #518493)
Cod sursa(job #518493)
#include <cstring>
#include <fstream>
#include <vector>
using namespace std;
int N, G;
int V[20010], Minob[75002];
vector<pair<int, int> > T[75002];
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;
T[j + V[i]].push_back(make_pair(j, T[j].size()));
if (j + V[i] >= Gmax)
Gmax = j + V[i], Nmin = Minob[j + V[i]];
}
}
fout << Gmax << ' ' << Nmin << '\n';
int now = Gmax, pos = T[Gmax].size(), aux;
while (now)
{
fout << now - T[now][pos - 1].first << '\n';
aux = now;
now = T[now][pos - 1].first;
pos = T[aux][pos - 1].second;
}
fin.close();
fout.close();
}