Pagini recente » Cod sursa (job #653386) | Cod sursa (job #2940368) | Cod sursa (job #2832266) | Cod sursa (job #1449186) | Cod sursa (job #18680)
Cod sursa(job #18680)
#include <stdio.h>
#define INF "ghiozdan.in"
#define OUF "ghiozdan.out"
#define NMAX 8192
struct obj
{
int gre,nr;
}a[NMAX],b[NMAX],*p,*q,*aux;
int v[NMAX];
FILE *out;
void print(int g)
{
if(g-a[g].gre>0) print(g-a[g].gre);
fprintf(out,"%d\n",a[g].gre);
}
int main()
{
int i,j,n,g,nm,gm,ok;
FILE *in;
in=fopen(INF,"r");
out=fopen(OUF,"w");
fscanf(in,"%d %d",&n,&g);
for(i=1;i<=n;i++) fscanf(in,"%d",&v[i]);
p=a;q=b;
p[0].gre=1;p[0].nr=0;
for(j=1;j<g;j++) { p[j].gre=-1;p[j].nr=(1<<24); }
for(i=1;i<=n;i++)
{
//a[v[i]].gre=v[i];a[v[i]].nr=1;
for(j=0;j<=g;j++)
if(v[i]<=j&&p[j-v[i]].nr+1<p[j].nr)
{
q[j].nr=p[j-v[i]].nr+1;
q[j].gre=v[i];
//printf("%d ",j);
}
else {q[j].nr=p[j].nr;q[j].gre=p[j].gre;}
aux=p;p=q;q=aux;
}
//for(i=1;i<=12;i++) printf("%d %d\n",p[i].nr,p[i].gre);
ok=0;
for(j=g;j>0&&!ok;j--)
if(p[j].gre>0) { gm=j;nm=p[j].nr;ok=1; }
fprintf(out,"%d %d",gm,nm);
//print(gm);
fclose(in);fclose(out);
return 0;
}