Cod sursa(job #3133588)

Utilizator petradutupetradutu petradutu Data 26 mai 2023 10:44:06
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>

#define MAX_N 20
#define MAX_M (1 << 18)

int N, G;
int S[MAX_M], A[MAX_M], V[MAX_N];

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)
		{
			if(i & (1 << j)) continue;
			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;
		}
	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();
}