Pagini recente » Cod sursa (job #56123) | Cod sursa (job #1142642) | Cod sursa (job #3191916) | Cod sursa (job #1767686) | Cod sursa (job #196878)
Cod sursa(job #196878)
#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;
void swap(int x, int y)
{
int t = x;
x = y;
y = t;
}
int kk;
int v[maxn];
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;
}
void back(int k)
{
if ( nrcam > min )
return;
if ( k > n )
{
if ( nrcam < min )
min = nrcam;
return;
}
for ( int i = 1; i <= kk; ++i )
{
if ( a[ v[i] ] + s[k-1] <= g )
{
s[k] = s[k-1] + a[ v[i] ];
swap(v[i], v[kk]);
--kk;
back(k+1);
++kk;
}
else
{
++nrcam;
s[k] = a[ v[i] ];
swap(v[i], v[kk]);
--kk;
back(k+1);
++kk;
--nrcam;
}
}
}
int main()
{
for ( int i = 0; i < 3; ++i )
{
readcase();
min = 1 << 30;
nrcam = 1;
back(1);
fprintf(out, "%d\n", min);
}
return 0;
}