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;
}