์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์ฐ์ ์์ํ
- ๋์ ํฉ
- ๋จธ์ง์ํธ
- ํ์ด์ฌ
- ์์๊ตฌํ๊ธฐ
- ๋์ ๊ณํ๋ฒ
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- DP
- ๊ตฌํ
- ์ ๋ ฌ
- SQL
- ์์ํ์
- ์๊ณ ๋ฆฌ์ฆ
- DFS
- ์ค๋ธ์
- ์๋ฃ๊ตฌ์กฐ
- ๋ณํฉ์ ๋ ฌ
- ๊ทธ๋ํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊ทธ๋ฆฌ๋
- db
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ํ๋ก๊ทธ๋๋จธ์ค
- LIS
- ๋ฐฑ์ค
- ๊น์ด์ฐ์ ํ์
- ๊ทธ๋ํํ์
- ์ํ
- BFS
- ๋๋น์ฐ์ ํ์
๐๐ญ๐ฐ๐ธ ๐ฃ๐ถ๐ต ๐ด๐ต๐ฆ๐ข๐ฅ๐บ
[๋ฐฑ์ค] 2133๋ฒ: ํ์ผ ์ฑ์ฐ๊ธฐ - C++ ๋ณธ๋ฌธ
๋ฌธ์
3×N ํฌ๊ธฐ์ ๋ฒฝ์ 2×1, 1×2 ํฌ๊ธฐ์ ํ์ผ๋ก ์ฑ์ฐ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 30)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
DP๋ฅผ ์ด์ฉํ์ฌ ํ ์ ์๋ ๋ฌธ์ .
...์ด๋ฐ์์ผ๋ก ๋ ธ๊ฐ๋ค๋ก ๊ฒฝ์ฐ์ ์๋ค์ ํ์ด์ฐ๋ค๋ณด๋ฉด ๊ท์น์ ๋ฐ๊ฒฌํ์ฌ ํ ์ ์๋ค. ์ฌ์ค ๋๋ ๊ตฌ๊ธ๋ง ํด๋ด๋ ์ดํด๋ฅผ ๋ชปํด์ ์ ๋ ๊ฒ ํ์๋ค.
3×N ํฌ๊ธฐ์ ๋ฒฝ์ 1×2 ํ์ผ ํน์ 2×1 ํ์ผ๋ก ์ฑ์ธ ์ ์๋ ๊ฒฝ์ฐ๋ N์ด ์ง์์ผ ๋ ๋ฟ์ด๊ณ , N์ด 2์ผ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ์ธ ์ ์๋ ํ์ผ์ ๋ชจ์ต์ ๋ค์๊ณผ ๊ฐ์ด ๋์จ๋ค.
๊ทธ๋ฆฌ๊ณ , N์ด 4 ์ด์์ผ ๊ฒฝ์ฐ ์์ ๊ฐ์ด ๊ฐ ํ์ผ์ ๊ธธ์ด๋งํผ ๋ฐฐ์นํ ์ ์๋ ์ถ๊ฐ์ ์ธ ๊ฒฝ์ฐ๋ค์ด ์กด์ฌํ๋ค.
๋ฐ๋ผ์ ๋ฐฐ์นํ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ชจ๋ ์ ๋ฆฌํ๋ฉด ์ ํ์์ ๋ค์๊ณผ ๊ฐ๋ค.
1. n ≥ 2, D[n] = D[n - 2] * D[2] // D[2] = 3
2. n ≥ 4, D[n] = D[n - 4] * 2
3. n ≥ 6, D[n] = D[n - 6] * 2
...
...
โก๏ธ D[n] = D[n - 2] * D[2] + D[n - 4] * 2 + ... + D[2] * 2 + D[0] * 2 (n ≥ 4)
์์ ๊ฐ์ด ๊ท์น์ ๋ฐ๋ผ ๋์จ ๊ฐ๋ค์ ๋ชจ๋ ๋ํด์ฃผ๋ฉด ๋ต์ด ๋์จ๋ค. ์ฌ๊ธฐ์ D[0]์ ์์ N์ด 4 ์ด์์ผ ๋์ ๊ทธ๋ฆผ์ฒ๋ผ ์๊ธฐ ์์ ์ ๊ธธ์ด๋งํผ ๋ฐฐ์นํ ์ ์๋ ๊ฒฝ์ฐ๋ก, D[0] = 1์ด๋ค.
์ฝ๋
#include <cstdio>
#include <vector>
#define MAX 31
using namespace std;
int DP(int num);
vector<int> memo(MAX, 0);
int main(void) {
int n;
scanf("%d", &n);
printf("%d\n", DP(n));
return 0;
}
int DP(int num) {
memo[0] = 1;
memo[2] = 3;
for(int i = 4; i <= num; i++) {
memo[i] += memo[i - 2] * memo[2];
for(int j = 4; j <= i; j += 2) {
memo[i] += memo[i - j] * 2;
}
}
return memo[num];
}