Cod sursa(job #91957)
//se da un sir care repr val a m monede si pt fiecare moneda se mai da si numarul de monede de cate sunt
//sa se afiseza toate modalitatile de plata a unei sume S folosindu-se monedele date;
#include <stdio.h>
#include<math.h>
#include<values.h>
long a[1003],st[1003],b[1003],n,S,nr,min=MAXINT,c[1003];
void citire(){
freopen("energii.in","r",stdin);
scanf ("%ld",&n);
scanf ("%ld",&S);
for (int i=0;i<n;i++) {
scanf ("%ld",&a[i]);
scanf ("%ld",&b[i]);
c[i]=S/a[i];
}
}
void afisare(){
long S=0;
for (int i=0;i<n;i++)
S+=st[i]*b[i];
if (S<min)
min=S;
}
void back(int k)
{
if (k==n)
{
if (nr>=S)
afisare();
return;
} for (int i=0;i<=c[k];i++)
{
st[k]=i;
nr+=a[k]*i;
back(k+1);
nr-=a[k]*i;
st[k]=0;
}
}
int main(){
citire();
freopen("energii.out","w",stdout);
back(0);
if (min==MAXINT)
min=-1;
printf("%ld",min);
printf("\n");
fclose(stdout);
return 0;
}