https://www.acmicpc.net/problem/2193
๋ฌธ์
0๊ณผ 1๋ก๋ง ์ด๋ฃจ์ด์ง ์๋ฅผ ์ด์ง์๋ผ ํ๋ค. ์ด๋ฌํ ์ด์ง์ ์ค ํน๋ณํ ์ฑ์ง์ ๊ฐ๋ ๊ฒ๋ค์ด ์๋๋ฐ, ์ด๋ค์ ์ด์น์(pinary number)๋ผ ํ๋ค. ์ด์น์๋ ๋ค์์ ์ฑ์ง์ ๋ง์กฑํ๋ค.
- ์ด์น์๋ 0์ผ๋ก ์์ํ์ง ์๋๋ค.
- ์ด์น์์์๋ 1์ด ๋ ๋ฒ ์ฐ์์ผ๋ก ๋ํ๋์ง ์๋๋ค. ์ฆ, 11์ ๋ถ๋ถ ๋ฌธ์์ด๋ก ๊ฐ์ง ์๋๋ค.
์๋ฅผ ๋ค๋ฉด 1, 10, 100, 101, 1000, 1001 ๋ฑ์ด ์ด์น์๊ฐ ๋๋ค. ํ์ง๋ง 0010101์ด๋ 101101์ ๊ฐ๊ฐ 1, 2๋ฒ ๊ท์น์ ์๋ฐฐ๋๋ฏ๋ก ์ด์น์๊ฐ ์๋๋ค.
N(1 ≤ N ≤ 90)์ด ์ฃผ์ด์ก์ ๋, N์๋ฆฌ ์ด์น์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ N์๋ฆฌ ์ด์น์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
i-1์๋ฆฌ ์ด์ฐฌ์ ์ค 0์ผ๋ก ๋๋๋ ์ ๋ค์ 0์ด๋ 1์ ๋ถ์ฌ์ i์๋ฆฌ ์ด์ฐฌ์๋ฅผ ๋ง๋ค ์ ์๋ค
i-1์๋ฆฌ ์ด์ฐฌ์ ์ค 1๋ก ๋๋๋ ์ ๋ค์ 0์ ๋ถ์ฌ์ i์๋ฆฌ ์ด์ฐฌ์๋ฅผ ๋ง๋ค ์ ์๋ค
๋ฐ๋ผ์ i-1์๋ฆฌ ์ด์ฐฌ์ ๊ฐฏ์๋ฅผ ์๋ค๋ฉด i์๋ฆฌ ์ด์ฐฌ์ ๊ฐฏ์๋ ๊ตฌํ ์ ์๋ค
์ด์ dp๋ฒกํฐ๋ฅผ ์ ์ธํ์ฌ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ด์ฉํ์๋ค
dp[0][i] = 0์ผ๋ก ๋๋๋ i์๋ฆฌ ์ด์ฐฌ์ ๊ฐฏ์
dp[1][i] = 1๋ก ๋๋๋ i์๋ฆฌ ์ด์ฐฌ์ ๊ฐฏ์
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<vector<long long>> dp(2, vector<long long>(91));
dp[0][1] = 0;
dp[1][1] = 1;
for(int i=2; i<=90; i++) {
dp[0][i] = dp[0][i-1] + dp[1][i-1];
dp[1][i] = dp[0][i-1];
}
int n;
cin >> n;
cout << dp[0][n] + dp[1][n];
return 0;
}