๋ฌธ์ |
๋ฌธ์
2รn ์ง์ฌ๊ฐํ์ 2ร1๊ณผ 2ร2 ํ์ผ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ ๊ทธ๋ฆผ์ 2ร17 ์ง์ฌ๊ฐํ์ ์ฑ์ด ํ๊ฐ์ง ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ n์ด ์ฃผ์ด์ง๋ค. (1 โค n โค 1,000)
์ถ๋ ฅ
์ฒซ์งธ ์ค์ 2รn ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ 10,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด๊ณผ์ |
(1) ๊ท์น
2x2, 1x2, 2x1 ํ์ผ์ด ๋ช๊ฐ ๋ค์ด๊ฐ๋์ง ํ์ธํฉ๋๋ค.
(2x2๋ 4, 1x2๋ 2, 2x1๋ 1๋ก ํ๊ธฐํฉ๋๋ค)
n=1 | 1 (1๊ฐ) |
n=2 | 4,2,1(3๊ฐ) |
n=3 | 41,14,21,12,111 (5๊ฐ) |
n=4 | (411,141,114,44)x2๊ฐ + 42,24,1111 (11๊ฐ) |
n=5 | (4111,1411,1141,1114,441,414,144)x2๊ฐ + 421,412,142,241,214,124,11111 (21๊ฐ) |
์ด์๊ฐ์ ๊ท์น์ผ๋ก ์งํ๋๋ฏ๋ก, ์ ํ์์ D[N] = D[N-1] + D[N-2]*2 ๋ก ๊ตฌํ ์ ์์ต๋๋ค
(2) ์์
๋ฉ๋ชจ์ด์ ์ด์ ์ ์ด์ฉํ์ฌ D[N] = (D[N-1] + D[N-2]*2) %10007๋ฅผ ๊ฐ ๋ฐฐ์ด์ ์ ์ฅํ ๋ค ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
(3) ์ฝ๋
#include <iostream> using namespace std; int memo[1001]; int main() { int n; cin >> n; memo[1] = 1; memo[2] = 3; for (int i = 3; i <= n ; i++) memo[i] = (memo[i - 1] + memo[i - 2] * 2) % 10007; for (int i = 1; i <= n; i++) cout << memo[i] << endl; return 0; } | cs |