Pagini recente » Cod sursa (job #144783) | Cod sursa (job #1919783) | Cod sursa (job #1758973) | Cod sursa (job #1517658) | Cod sursa (job #272821)
Cod sursa(job #272821)
#include<fstream.h>
ofstream fout("zebughil.out");
long nr,c,v[100],a[100],n,g;
int divide(int p, int q)
{
int st=p, dr=q, x=a[p];
while (st<dr)
{
while (st<dr && a[dr]>=x)
dr--;
a[st]=a[dr];
while (st<dr && a[st]<=x)
st++;
a[dr]=a[st];
}
a[st]=x;
return st;
}
void qsort(int p, int q)
{
int m=divide(p,q);
if (m-1>p)
qsort(p,m-1);
if (m+1<q)
qsort(m+1,q);
}
void alegere(long suma, long poz)
{
long upoz=0;
while (suma+a[poz]<=g)
{
if (v[poz]==0)
upoz=poz;
poz++;
}
if (upoz!=0)
{
suma=suma+a[upoz]; v[upoz]=1; nr--;
}
if (suma<g && nr>0 && upoz!=0)
alegere(suma,upoz+1);
}
void alegere1elem()
{
long i,suma;
i=n;
while (v[i]!=0)
i--;
c++;
v[i]=1; suma=a[i]; nr--;
if (nr>0)
alegere(suma,1);
if (nr>0)
alegere1elem();
}
void calculare()
{
long i;
if (n==0)
fout<<"0"<<'\n'; else
if (n==1)
fout<<"1"<<'\n'; else
{
qsort(1,n);
c=0;
for (i=1; i<=n; i++)
v[i]=0;
nr=n;
alegere1elem();
fout<<c<<'\n';
}
}
int main()
{
long i,j;
ifstream fin("zebughil.in");
for (i=1; i<=3; i++)
{
fin>>n>>g;
for (j=1; j<=n; j++)
fin>>a[j];
calculare();
}
return 0;
}