눈팅하는 게임개발자 블로그

백준 알고리즘 2775 본문

공부한거/백준알고리즘

백준 알고리즘 2775

Palamore 2017. 12. 29. 14:34

#include 
#include
using namespace std;
int memoization[15][15];
void init() {
	for (int i = 0; i < 15; i++) {
		memoization[0][i] = i;
	}
	for (int i = 1; i < 15; i++) {
		memset(&memoization[i][0], 0, 15 * 4);
	}
}
int dp_room(int k, int n) {
	if (memoization[k][n] != 0) {
		return memoization[k][n];
	}
	else {
		int temp = 0;
		for (int i = 1; i <= n; i++) {
			temp = temp + dp_room(k - 1, i);
		}
		memoization[k][n] = temp;
		return temp;
	}
}

int main() {
		init();
		int T;
		cin >> T;
		int k, n;
		for (int i = 0; i < T; i++) {
			cin >> k >> n;
			cout << dp_room(k, n);
			if (i != T - 1)
				cout << "\n";
		}

	return 0;
}

해당문제의 조건은 1<= k,n <= 14이기 때문에 dp를 사용하지 않아도 풀 수 있는 문제지만.

보고나서 바로 dp를 사용해야겠다는 생각을 했기 때문에 dp를 구현.

아랫층의 1~n까지의 숫자를 더해야한다는 확실한 규칙이 있기때문에 dp를 적용할 수 있다.


'공부한거 > 백준알고리즘' 카테고리의 다른 글

백준 알고리즘 2108  (0) 2018.01.08
백준 알고리즘 10989  (0) 2018.01.05
백준 알고리즘 6064  (0) 2018.01.02
백준 알고리즘 1316  (0) 2017.12.27
백준 알고리즘 2448  (0) 2017.12.22