Pagini recente » Cod sursa (job #3262544) | Cod sursa (job #1895628) | Cod sursa (job #1018046) | Cod sursa (job #1113307) | Cod sursa (job #1064791)
#include <stdio.h>
#include <string.h>
FILE *in,*out;
#define MAX (1<<19)
using namespace std;
int maxim(int x, int y) {return x > y ? x : y;}
int n, c[MAX][20], G, v[20], max;
int main()
{
in=fopen("zebughil.in","rt");
out=fopen("zebughil.out","wt");
int i, j, k;
for (int t = 1; t <= 3; t++)
{
fscanf(in,"%d %d",&n,&G);
for (i = 0; i < n; i++)
fscanf(in,"%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;
fprintf(out,"%d\n",i);
}
fclose(in);
fclose(out);
return 0;
}