코딩/C언어

조합의 수(memo)

런던전통손만두 2019. 9. 19. 01:04
반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
int comb(int n, int r, int** memo)
{
    if (r == 0 || r == n)
    {
        memo[n][r] = 1;
        return memo[n][r];
    }
    else
    {
        if (memo[n - 1][r - 1== 0)
            memo[n - 1][r - 1= comb(n - 1, r - 1, memo);
 
        if (memo[n - 1][r] == 0)
            memo[n - 1][r] = comb(n - 1, r, memo);
 
        memo[n][r] = memo[n - 1][r - 1+ memo[n - 1][r];
 
        return memo[n][r];
    }
}
int main(void)
{
    int c, n, r, i, j;
    int **memo;
 
    scanf("%d %d"&n, &r);
 
    memo = (int**)malloc(sizeof(int** (n + 1));
    for (i = 0; i <= n; i++)
        memo[i] = (int*)malloc(sizeof(int* (r + 1));
 
    for (i = 0; i <= n; i++)
        for (j = 0; j < r + 1; j++)
            memo[i][j] = 0;
 
    c = comb(n, r, memo);
    printf("%d\n", c);
}
cs

 

결과:

 

반응형