Pagini recente » Cod sursa (job #2274162) | Cod sursa (job #2742531) | Cod sursa (job #1216517) | Cod sursa (job #277534) | Cod sursa (job #196880)
Cod sursa(job #196880)
#include <cstdio>
const int maxn = 20;
FILE *in = fopen("zebughil.in","r"), *out = fopen("zebughil.out","w");
int n, g;
int a[maxn];
int s[maxn];
int min;
int nrcam;
int kk;
int v[maxn];
void swap(int x, int y)
{
int t = v[x];
v[x] = v[y];
v[y] = t;
}
void readcase()
{
fscanf(in, "%d %d", &n, &g);
for ( int i = 1; i <= n; ++i )
fscanf(in, "%d", &a[i]), v[i] = i;
kk = n;
}
int nrit;
void back(int k)
{
if ( nrit > 20000000 )
return;
if ( nrcam > min )
return;
if ( k > n )
{
if ( nrcam < min )
min = nrcam;
return;
}
for ( int i = 1; i <= kk; ++i )
{
++nrit;
if ( a[ v[i] ] + s[k-1] <= g )
{
s[k] = s[k-1] + a[ v[i] ];
swap(i, kk);
--kk;
back(k+1);
++kk;
}
else
{
++nrcam;
s[k] = a[ v[i] ];
swap(i, kk);
--kk;
back(k+1);
++kk;
--nrcam;
}
}
}
int main()
{
for ( int i = 0; i < 3; ++i )
{
readcase();
nrit = 0;
min = 1 << 30;
nrcam = 1;
back(1);
fprintf(out, "%d\n", min);
}
return 0;
}