코드 복사/붙여넣기 하는 당신이 아름답습니다.

1562 : 계단 수

풀이

D[length][number][bitmask] = D[length - 1][number ± 1][bitmask | (1 << number)]

룰루랄라 코딩을 해보자~

코드

#include <stdio.h>
#include <string.h>

const int mod = 1e9;
int n, ans, dp[101][10][1025];

int dfs(int len, int num, int msk) {
	int &ret = dp[len][num][msk];
	msk |= (1 << num);

	if (num < 0 || num > 9) return 0;
	if (len == n) return (msk == (1 << 10) - 1) ? 1 : 0;
	if (ret != -1) return ret;

	return ret = ((long long)dfs(len + 1, num - 1, msk) + dfs(len + 1, num + 1, msk)) % mod;
}


int main() {
	scanf("%d", &n);

	memset(dp, -1, sizeof(dp));
	for (int i = 1; i <= 9; i++) ans = ((long long)ans + dfs(1, i, 0)) % mod;

	printf("%d", ans);

	return 0;
}

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2018-01-07 17:28

Read more posts by this author