※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2698번 문제인 인접한 비트의 개수이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2698
2698번: 인접한 비트의 개수
첫째 줄에 테스트 케이스의 수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 수 2개가 공백으로 구분되어 이루어져 있다. 첫 번째 수는 n이고, 두 번째 수는 k이다. n과
www.acmicpc.net
양의 정수 n과 n보다 작은 음이 아닌 정수 k에 대하여 dp[n][k][bit]를 길이가 n이면서 인접한 1의 쌍이 k개 있는, 마지막 수가 bit인 수열 S의 개수로 정의하자. 이 때 각 dp[n][k][bit]을 dp[n-1][k][bit]와 dp[n-1][k-1][bit]을 이용해 어떻게 나타낼 수 있는지를 고민해 점화식을 세워 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int dp[101][101][2]; // [n][k]
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
dp[0][0][0] = 1;
for (int n = 1; n < 101; n++) {
dp[n][0][0] = dp[n - 1][0][0] + dp[n - 1][0][1];
dp[n][0][1] = dp[n - 1][0][0];
for (int k = 1; k < n; k++) {
dp[n][k][0] = dp[n - 1][k][0] + dp[n - 1][k][1];
dp[n][k][1] = dp[n - 1][k][0] + dp[n - 1][k - 1][1];
}
}
int T; cin >> T;
while (T--) {
int n, k; cin >> n >> k;
cout << dp[n][k][0] + dp[n][k][1] << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 2701 // C++] 육각 퍼즐 (0) | 2023.04.24 |
---|---|
[BOJ 2700 // C++] 볼록 격자 다각형의 내부점 (1) | 2023.04.23 |
[BOJ 2697 // C++] 다음수 구하기 (0) | 2023.04.21 |
[BOJ 2694 // C++] 합이 같은 구간 (0) | 2023.04.20 |
[BOJ 2695 // C++] 공 (0) | 2023.04.19 |