Pagini recente » Cod sursa (job #128872) | Cod sursa (job #656976) | Cod sursa (job #984567) | Cod sursa (job #1022975) | Cod sursa (job #217564)
Cod sursa(job #217564)
#include<stdio.h>
int n,poz,uz[19],selectie[19];
long v[18],gr,x[18],min=2000000000;
FILE *f,*g;
void read ()
{
fscanf(f,"%d%ld",&n,&gr);
int i;
for (i=1;i<=n;++i)
fscanf(f,"%ld",&v[i]);
}
void solve ()
{
int i,nr=1;
long inainte=0;
for (i=1;i<=n;++i)
x[i]=v[selectie[i]];
for (i=1;i<n;)
{
while (inainte+x[i]<=gr&&i<=n)
{
inainte+=x[i];
i++;
//if (i==n+1)
//nr++;
}
if (i<=n)
{
nr++;
inainte=0;
//i++;
}
}
if (nr<min)
min=nr;
}
void back (int k)
{
int i;
if (k==n+1)
solve ();
else
for (i=1;i<=n;++i)
if (!uz[i])
{
uz[i]=1;
selectie[++poz]=i;
back(k+1);
uz[i]=0;
poz--;
}
}
void write ()
{ fprintf(g,"%d\n",min); }
int main ()
{
int i;
f=fopen("zebughil.in","r");
g=fopen("zebughil.out","w");
read ();
back (1);
write ();
min=2000000000;
poz=0;
for (i=1;i<=18;++i)
uz[i]=0;
read ();
back (1);
write ();
min=2000000000;
poz=0;
for (i=1;i<=18;++i)
uz[i]=0;
read ();
back (1);
write ();
fclose(f);
fclose(g);
return 0;
}