티스토리 뷰
728x90
문제 링크
1562번: 계단 수
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
www.acmicpc.net
풀이
백준 10844 - 쉬운 계단 수 문제에서 모든 수가 한 번 이상 포함되어야 한다는 조건이 추가되었습니다.
쉬운 계단 수와 전개는 똑같이 하되, 현재까지 나온 수들을 집합으로 관리해줍시다.
수의 길이가 n일 때 0번 ~ 9번까지의 모든 비트가 켜져있어야 합니다.
정답 코드
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll MOD = 1'000'000'000;
ll d[(1 << 10)][111][11]; // 집합, 길이, 마지막
int allbit = (1 << 10) - 1;
int n;
ll go(int s, int l, int last) {
if (last < 0 || last > 9) return 0;
if (l == n) {
if (s == allbit) return 1;
else return 0;
}
ll &ret = d[s][l][last];
if (ret != -1) return ret;
if (l == 0) {
ret = 0;
for (int i = 1; i < 10; i++) {
ret += go(1 << i, l + 1, i);
ret %= MOD;
}
return ret;
}
ret = go(s | (1 << (last - 1)), l + 1, last - 1);
ret += go(s | (1 << (last + 1)), l + 1, last + 1);
ret %= MOD;
return ret;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
memset(d, -1, sizeof(d));
cin >> n;
cout << go(0, 0, 0);
}
728x90
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[BOJ] 백준 1647 도시 분할 계획 (0) | 2021.03.08 |
---|---|
[BOJ] 백준 1644 소수의 연속합 (0) | 2021.03.08 |
[BOJ] 백준 10844 쉬운 계단 수 (0) | 2021.03.07 |
[BOJ] 백준 1516 게임 개발 (0) | 2021.03.07 |
[BOJ] 백준 1509 팰린드롬 분할 (0) | 2021.03.07 |
댓글