Pagini recente » Cod sursa (job #545991) | Cod sursa (job #1338439) | Cod sursa (job #265832) | Cod sursa (job #19082) | Cod sursa (job #475352)
Cod sursa(job #475352)
#include <iostream>
#include <string>
using namespace std;
#define NM 20
#define NM2 132000
#define inf 2000000000
int TMIN[NM2];
int main()
{
freopen ("zebughil.in", "r", stdin);
freopen ("zebughil.out", "w", stdout);
int Q = 3, N, G, Z[NM], L[NM];
while (Q--)
{
scanf ("%d %d\n", &N, &G);
for (int i = 1; i <= N; ++i) scanf ("%d ", &Z[i]);
TMIN[0] = 0;
for (int conf = 1; conf < (1<<N); ++conf)
{
int cate = 0;
for (int i = 1; i <= N; ++i)
if ((1<<(i-1)) & conf) L[++cate] = i;
int best = inf;
for (int conf2 = 1; conf2 < (1<<cate); ++conf2)
{
int confb = 0, zz = 0;
for (int i = 1; i <= cate; ++i)
if ((1<<(i-1)) & conf2)
{
confb += (1<<(L[i]-1));
zz += Z[L[i]];
}
if (zz <= G) best = min(best, TMIN[conf - confb] + 1);
}
TMIN[conf] = best;
}
printf ("%d\n", TMIN[(1<<N)-1]);
}
return 0;
}