Cod sursa(job #91837)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 13 octombrie 2007 15:43:56
Problema Shop Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
//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>
long a[100],st[100],b[100],n,S,nr,c,min=10012,final[100];
void citire(){
	freopen("shop.in","r",stdin);
	scanf ("%ld",&n);
	scanf ("%ld",&c);
	scanf ("%ld",&S);
	for (int i=0;i<n;i++)     {
		scanf ("%ld",&a[i]);
		scanf ("%ld",&b[i]);
		a[i]=pow(c,a[i]);}
}
void afisare(){
long S=0;
for (int i=0;i<n;i++)
   S+=st[i];                           
if (S<min){
   min=S;
for (int i=0;i<n;i++)
final[i]=st[i];}
}
void back(int k)
{
	if (k==n)
	{
		if (S==nr)
		afisare();
		return;
	}
	for (int v=0;v<=b[k];v++)
		if (nr+a[k]*v<=S)
		{
			st[k]=v;
			nr+=a[k]*v;
			back(k+1);
			nr-=a[k]*v;
		}

}
int main(){
	citire();
	freopen("shop.out","w",stdout);
	back(0);
	printf("%ld",min);
	printf("\n");
	for (int i=0;i<n;i++)     {
	    printf("%ld",final[i]);
	    printf(" ");
	    }
	fclose(stdout);
return 0;
}