Pagini recente » Cod sursa (job #1148244) | Cod sursa (job #892949) | Cod sursa (job #1453305) | Cod sursa (job #3276652) | Cod sursa (job #18234)
Cod sursa(job #18234)
#imclude<stdio.h>
char V[Gmax],M[Gmax],A[Nmax];
int N,G;
struct lista
{
int inf;
lista *urm;
};
void cit()
{
int i;
freopen("ghiozdan.in","r",stdin);
scanf("%d%d",&N,&G);
for(i=1;i<=N;i++)
scanf("%d",&A[i]);
}
void rez()
{
int i;
lista *C,*D,*E,*c,*d,*e;
V[0]=1;
M[0]=1;
C=new lista;
C->urm=new lista;
C->urm->inf=0;
C->urm->urm=NULL;
for(i=1;i<=N;i++)
{
D=new lista;
d=D;
for(c=C->urm;c;c=c->urm)
if( c->inf+A[i]<=G && V[c->inf+A[i]]==0 && ( V[c->inf+A[i]] && M[c->inf+A[i]]>M[c->inf]+1)
{
V[c->inf+A[i]]=1;
M[c->inf+A[i]]=M[c->inf]+1;
d->urm=new lista;
d=d->urm;
d->inf=c->inf+A[i];
d->urm=NULL
}
c=C;
d=D;
E=new lista;
e=E;
while( c && d )
{
if(c->inf<d->inf)
{
e->urm=new lista;
e=e->urm;
e->inf=c->inf;
e->urm=NULL;
c=c->urm;
}
else if(c->inf>=d->inf)
{
e->urm=new lista;
e=e->urm;
e->inf=d->inf;
e->urm=NULL;
d=d->urm;
}
}
}
}
int main()
{
cit();
rez();
scr();
return 0;
}