Pagini recente » Cod sursa (job #1728796) | Cod sursa (job #2783742) | Cod sursa (job #161175) | Cod sursa (job #3141750) | Cod sursa (job #2846630)
#include <fstream>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
struct punct
{
int nr, g;
} d[130000];
int v[18];
int n, gmax, st, ant, bit;
int main()
{
d[0].nr = 1, d[0].g = 0;
for (int t = 1; t <= 3; t++)
{
fin >> n >> gmax;
for (int i = 1; i <= n; i++)
fin >> v[i];
for (int i = 1; i < (1 << n); i++)
{
d[i].nr = n + 1;
d[i].g = 0;
}
for (st = 1; st < (1 << n); st++)
{
for (bit = 0; bit < n; bit++)
{
if (((st >> bit) & 1) == 1)
{
ant = st - (1 << bit);
if (d[ant].nr != n + 1)
{
if (d[ant].g + v[bit + 1] <= gmax)
{
if (d[st].nr > d[ant].nr || d[st].nr == d[ant].nr && d[st].g > d[ant].g + v[bit + 1])
{
d[st].nr = d[ant].nr;
d[st].g = d[ant].g + v[bit + 1];
}
}
else
{
if (d[st].nr > d[ant].nr + 1 || d[st].nr == d[ant].nr + 1 && d[st].g > v[bit + 1])
{
d[st].nr = d[ant].nr + 1;
d[st].g = v[bit + 1];
}
}
}
}
}
}
fout << d[(1 << n) - 1].nr << '\n';
}
return 0;
}