Pagini recente » Cod sursa (job #2862415) | Cod sursa (job #67706) | Cod sursa (job #1562988) | Cod sursa (job #1772737) | Cod sursa (job #314990)
Cod sursa(job #314990)
#include <cstdio>
#define MAX_N 20
#define MAX_M (1 << 18)
int N, G;
int S[MAX_M];
long long A[MAX_M], V[MAX_N];
void solve()
{
scanf("%d %d",&N, &G);
for(int i = 0; i < N; ++i)
scanf("%lld",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();
#ifdef _HOME_
break;
#endif
}
}