Pagini recente » Cod sursa (job #574796) | Cod sursa (job #892205) | Cod sursa (job #2059046) | Cod sursa (job #459060) | Cod sursa (job #405217)
Cod sursa(job #405217)
#include <stdio.h>
using namespace std;
#define NMAX 20
#define VAL (1 << 17)
#define INF 2000000001
//#define min(a,b) a<b ? a:b
int A[NMAX], B[VAL][NMAX], N, G, rez;
int min(int A, int B)
{
return A < B ? A : B;
}
void init(int val)
{ int i, j;
for (i = 0; i <= val; i++)
for (j = 0; j <= N; j++)
B[i][j] = INF;
B[0][1] = 0;
}
int main()
{ int k, i, j, t, val, nr,ok;
freopen("zebughil.in", "r", stdin);
freopen("zebughil.out", "w", stdout);
for (k = 1; k <= 3; k++)
{
scanf("%d %d", &N, &G);
for (j = 1; j <= N; j++)
scanf("%d", &A[j]);
val = (1<<N) -1;
init(val);
for (i = 0; i <= val; i++)
for (j = 0; j <= N; j++)
if (B[i][j] != INF)
for (t = 0; t < N; t++)
{
nr = 1<<t;
ok = nr&i;
if (ok == 0)
{
ok = i|nr;
if (B[i][j] + A[t + 1] <= G) B[ok][j] = min(B[ok][j], B[i][j] + A[t+1]);
else B[ok][j + 1] = min(B[ok][j+1], A[t+1]);
}
}
for (i = 1; i <= N; i++)
if (B[val][i] != INF) break;
printf("%d\n", min(N, i));
}
}