Resenje je f(m1, m1, m2, m2, m3, m3, m4, m4, m5, m5, n), a funkcija je data rekurzivnom formulom:
Code:
int f(int m1, int mo1, int m2, int mo2, int m3, int mo3, int m4, int mo4, int m5, int mo5, int n)
{
int rez = 0;
if (mo1 > 0 && n >= 1)
rez += f(m1, mo1 - 1, m2, m2, m3, m3, m4, m4, m5, m5, n - 1);
if (mo2 > 0 && n >= 2)
rez += f(m1, m1, m2, mo2 - 1, m3, m3, m4, m4, m5, m5, n - 2);
if (mo3 > 0 && n >= 3)
rez += f(m1, m1, m2, m2, m3, mo3 - 1, m4, m4, m5, m5, n - 3);
if (mo4 > 0 && n >= 4)
rez += f(m1, m1, m2, m2, m3, m3, m4, mo4 - 1, m5, m5, n - 4);
if (mo5 > 0 && n >= 5)
rez += f(m1, m1, m2, m2, m3, m3, m4, m4, m5, mo5 - 1, n - 5);
return rez;
}
Objasnjenje: funkcija bira jedan po jedan sabirak, sve dok se n ne smanji na nulu. Kada za tekuci sabirak izaberemo neki broj, moramo voditi racuna koliko jos puta uzastopno mozemo upotrebiti taj isti broj - zato sluze vrednosti mo1, mo2, mo3, mo4 i mo5 (kada izaberemo na primer dvojku, mo2 ce se smanjiti za jedan, a mo1, mo3, mo4 i mo5 ce se postaviti na pocetne vrednosti).