Pagini recente » Cod sursa (job #684066) | Cod sursa (job #1278240) | Cod sursa (job #5355) | Cod sursa (job #1955717) | Cod sursa (job #314988)
Cod sursa(job #314988)
#include <cstdio>
#define MAX_N 20
#define MAX_M (1 << 17)
int N, V[MAX_N], G;
int S[MAX_M], A[MAX_M];
void solve()
{
scanf("%d %d",&N, &G);
for(int i = 0; i < N; ++i)
scanf("%d",V+i);
int M = (1 << N);
for(int i = 1; i < M; ++i)
S[i] = N+1;
for(int i = 0; i < M; ++i)
for(int j = 0; j < N; ++j)
{
int act = i + (1 << j);
int nr = 0;
int cat = A[i] - V[j];
if((A[i] - V[j]) < 0)
++nr,
cat = G - V[j];
if(S[i] + nr == S[act])
{
if(cat > A[act])
A[act] = cat;
}
else if(S[i] + nr < S[act])
S[act] = S[i] + nr,
A[act] = cat;
//fprintf(stderr,"%d %d %d %d %d\n", S[i], S[act], act, nr, cat);
}
printf("%d\n",S[M-1]);
}
int main()
{
freopen("zebughil.in","rt",stdin);
freopen("zebughil.out","wt",stdout);
for(int i = 1; i < 4; ++i)
{
solve();
//break;
}
}