Computer Science/알고리즘
HW#06 : Dynamic Programming을 이용한 Binomial Coefficient 문제 해결
Theo Kim
2011. 3. 31. 00:06
#include <stdio.h> #include <stdlib.h> int minimum(int i, int k) { if(i < k) return i; else return k; } int bin2(int n, int k) { // Valable Decaltion int i = 0; int j = 0; int **B = NULL; int returnValue = 0; // Matrix Initialization B = (int**)malloc(sizeof(int*) * (n+1)); for(i = 0; i < n+1; i++) B[i] = (int*)malloc(sizeof(int) * (k+1)); for(i = 0; i < n+1; i++) for(j = 0; j < k+1; j++) B[i][j] = 0; // Binomial Coefficient for(i = 0; i <= n; i++) for(j = 0; j <= minimum(i,k); j++) if(j == 0 || j == i) B[i][j] = 1; else B[i][j] = B[i-1][j-1] + B[i-1][j]; returnValue = B[n][k]; // Matrix Uninitialization for(i = 0; i < n+1; i++) free(B[i]); free(B); return returnValue; } int main(int argc, char argv[]) { printf("B[4][2] = %d\n", bin2(4,2)); return 0; }