Algorithm/Cases-BOJ

다리 놓기

Xi_kor 2021. 4. 14. 19:11

DP 문제로 정해진 규칙을 활용해 메모이제이션으로 해결했다.

#include <iostream>
using namespace std;

int d[50][50];

int checking(int n, int m) {
	if (d[n][m] > 0) return d[n][m];
	if (n == m) return d[n][m] = 1;
	else if (n > m) {
		return d[n][m] = 0;
	}
	else if (n == 1) {
		return d[n][m] = m;
	}
	else {
		for (int k = m - 1; k >= n - 1; k--) {
			d[n][m] += checking(n-1, k);

		}
		return d[n][m];
	}
}


int main()
{
	int tc;
	cin >> tc;

	for (int T = 1; T <= tc; T++) {
		int n, m;
		cin >> n >> m;

		cout<<checking(n, m)<<'\n';
	}
	return 0;
}