Study hard

(c++)백준 2193번: 이친수 본문

백준/DP

(c++)백준 2193번: 이친수

Nimgnoej 2020. 6. 9. 09:04

https://www.acmicpc.net/problem/2193

 

2193번: 이친수

0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않

www.acmicpc.net

1. 0은 첫번째 자리에 올 수 없다.

2. 1은 앞에 0이 있어야 나올 수 있다.

 

※점화식※

dp[i][j] : i번째 자리가 j일 때 이친수 개수

dp[1][0] = 0 (첫번째 자리에 0 올 수 없다.)

dp[1][1] = 1

dp[x][0] = dp[x-1][0] + dp[x-1][1] (x번째 자리에 0이 오면 그 앞은 0과 1 모두 있을 수 있다.)

dp[x][1] = dp[x-1][0] (x번째 자리에 1이 오면 그 앞은 0만 있을 수 있다.)

 

#include <iostream>
using namespace std;

int N;
long long dp[91][2];

void DP() {
	dp[1][0] = 0;
	dp[1][1] = 1;
	for (int i = 2; i <= N; i++) {
		dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
		dp[i][1] = dp[i - 1][0];
	}
	cout << dp[N][0] + dp[N][1] << endl;
}

int main() {
	cin >> N;
	DP();
	return 0;
}

'백준 > DP' 카테고리의 다른 글

(c++)백준 2156번: 포도주 시식  (0) 2020.06.09
(c++)백준 9465번: 스티커  (0) 2020.06.09
(c++)백준 11057번: 오르막 수  (0) 2020.06.08
(c++)백준 10844번: 쉬운 계단 수  (0) 2020.06.08
(c++)백준 9095번: 1, 2, 3 더하기  (0) 2020.06.08