#include<cstdio> int main(void) { int n, m, t; int val[30][30]={0}; scanf("%d", &t); for(int test=0; test<t; test++) { scanf("%d%d", &n, &m); for(int j=0; j<m; j++) { val[0][j] = j+1; } for(int i=1; i<n; i++) { for(int j=i; j<m; j++) { val[i][j] = val[i][j-1] + val[i-1][j-1]; } } printf("%d\n", val[n-1][m-1]); } return 0; }
이런저런 생각을 하다가 엉뚱한데 시간을 보냈지만, 그림을 그려보면 왼쪽에 i개 오른쪽에 j개가 있을 때의 경우의 수는, 왼쪽 i, 오른쪽에 j-1개 있을 때와 왼쪽에 i-1개 오른쪽에 j-1개 있을 때의 합과 같다.
알고리즘 분류 : 다이나믹 프로그래밍
EmoticonEmoticon