Bu məsələ, daşınmanın təkrarlanması ilə birləşmələrin sayının hesablanmasına, yəni bu tənliyin həllinə gətirilir:
burada
x_i — -ci yerdə yerləşdirilən obyektlərin sayı,
— yerlərin sayı.
— obyektlərin ümumi sayı.
Hər bir x_i qeyri-mənfi tam ədəd ola bilər. Bu tənliyin həllərinin sayı aşağıdakı düsturla təyin olunur (eolymp məsələsi ): C_{n+k-1}^{k-1}.
Nümunə
Birinci nümunədə (k = 3, n = 4) cavab C_6^2 = (6 \cdot 5) / 2 = 15.
İkinci nümunədə (k = 3, n = 2) cavab C_4^2 = (4 \cdot 3) / 2 = 6.
Alqoritmin reallaşdırılması
Daimiləri və binominal əmsalın dəyərlərinin yadda saxlanması üçün massivini təyin edək.
#define MAX 201
#define MOD 1000000007
long long dp[MAX][MAX];Cnk funksiyası C_n^k binominal əmsalının MOD = 10^9 + 7 ilə modul alınmış dəyərini hesablayır.
long long Cnk(int n, int k)
{
if (n == k) return 1;
if (k == 0) return 1;
if (dp[n][k] != -1) return dp[n][k];
return dp[n][k] = (Cnk(n - 1, k - 1) + Cnk(n - 1, k)) % MOD;
}Proqramın əsas hissəsi. Giriş məlumatlarını oxuyuruq.
scanf("%d %d", &k, &n);
memset(dp, -1, sizeof(dp));C_{n + k - 1}^{k - 1} dəyərini hesablayır və nəticəni çıxarırıq.
printf("%lld\n", Cnk(n + k - 1, k - 1));