Pagini recente » Cod sursa (job #2291243) | Cod sursa (job #1578079) | Cod sursa (job #1079751) | Cod sursa (job #2248869) | Cod sursa (job #71164)
Cod sursa(job #71164)
#include <stdio.h>
int i,j,k,g,w,x,y,a[2000],b[2000],min,st[2000],p,s;
void init() {st[k]=-1;}
int Am_Succ()
{ if (st[k]<1)
{st[k]++;
s+=a[k]*st[k];
p+=b[k]*st[k];
return 1;
}
else return 0;
}
int E_Valid()
{if (p>=min) return 0;
return 1;
}
int solutie()
{if ((k==g)||(s>=w)) return 1;
else return 0;
}
void tipar()
{if((s>=w) && (p<min)) min=p;}
void back()
{int as;
k=1;init();
while (k>0)
{do {as=Am_Succ(); } while (as && !E_Valid());
if (as) if (solutie()) tipar();
else {k++;init();}
else {s=s-a[k]*st[k];
p=p-b[k]*st[k];
k--;
}
}
}
int main()
{
FILE *fin,*fout;
fin=fopen("energii.in","r");
fscanf(fin,"%d",&g);
fscanf(fin,"%d",&w);
s=0;
for (i=1;i<=g;i++)
{fscanf(fin,"%d",&a[i]);
fscanf(fin,"%d",&b[i]);
s+=a[i];
}
fclose(fin);
min=32000;
if (s>=w){ p=s=0; back();}
//else if (s==w) min=s;
else min=-1;
fout=fopen("energii.out","w");
fprintf(fout,"%d",min);
fclose(fout);
return 0;
}