Pagini recente » Cod sursa (job #835317) | Cod sursa (job #235849) | Cod sursa (job #2576563) | Cod sursa (job #2816974) | Cod sursa (job #3040737)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int n, g, w[(1 << 18)], nr[(1 << 18)], v[18];
void solve()
{
fin >> n >> g;
for(int i = 0; i < n; ++ i)
{
fin >> v[i];
}
int comp = (1 << n) - 1;
for(int i = 1; i <= comp; ++ i)
{
w[i] = 0;
nr[i] = -1;
}
nr[0] = 1;
for(int i = 1; i <= comp; ++ i)
{
for(int j = 0; j < n; ++ j){
if(i & (1 << j))
{
int prec = i ^ (1 << j);
if(w[prec] + v[j] <= g)
{
if((nr[prec] < nr[i] || nr[i] == -1) || (nr[prec] == nr[i] && w[i] > w[prec] + v[j]))
{
nr[i] = nr[prec];
w[i] = w[prec] + v[j];
}
}
else
if((nr[prec] + 1 < nr[i] || nr[i] == -1) || ((nr[prec] + 1) == nr[i] && w[i] > v[j]))
{
nr[i] = nr[prec] + 1;
w[i] = v[j];
}
}
}
}
fout << nr[comp] << '\n';
}
int main()
{
for(int i = 0; i < 3; ++ i)
solve();
return 0;
}