Pagini recente » Cod sursa (job #358463) | Cod sursa (job #3216108) | Cod sursa (job #2631281) | Cod sursa (job #2873837) | Cod sursa (job #217585)
Cod sursa(job #217585)
#include <stdio.h>
#include <string.h>
#define MAX (1<<19)
int maxim(int x, int y) {return x > y ? x : y;}
int n, c[MAX][20], G, v[20], max;
int main()
{
freopen("zebughil.in","r",stdin);
freopen("zebughil.out","w",stdout);
int i, j, k;
for (int t = 1; t <= 3; t++)
{
scanf("%d %d",&n,&G);
for (i = 0; i < n; i++) scanf("%d",v + i);
max = (1<<n) - 1;
for (i = 0; i <= max; i++)
for (j = 0; j <= n; j++) c[i][j] = -1;
c[0][0] = 0;
for (i = 0; i <= max; i++)
for (j = 0; j < n; j++)
if (c[i][j] != -1)
for (k = 0; k < n; k++)
if ((i & (1 << k)) == 0)
{
if (c[i][j] >= v[k])
{
if (c[i + (1<<k)][j]) c[i + (1<<k)][j] = c[i][j] - v[k];
else c[i + (1<<k)][j] = maxim(c[i + (1<<k)][j],c[i][j] - v[k]);
}
else c[i + (1<<k)][j + 1] = G - v[k];
}
for (i = 0; i <= n; i++) if (c[max][i] != -1) break;
printf("%d\n",i);
}
return 0;
}