5546๋ฒ: ํ์คํ
์๊ทผ์ด๋ ๋งค์ผ ์ ๋ ์ผ๋ก ํ์คํ๋ฅผ ๋ง๋ค์ด ๋จน๋๋ค. ์๊ทผ์ด๊ฐ ๋ง๋ค ์ ์๋ ํ์คํ๋ ์ด ์ธ ์ข ๋ฅ๋ก ํ ๋งํ ์์ค, ํฌ๋ฆผ ์์ค, ๋ฐ์ง ์์ค์ด๋ค. ์๊ทผ์ด๋ ์์ผ๋ก N์ผ ๋์ ๋จน์ ํ์คํ๋ฅผ ๊ณํํ๋ ค๊ณ
www.acmicpc.net
โจ ๋ด ์์ค ์ฝ๋
#include<iostream>
#include <string>
using namespace std;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
int a[101] = { 0, }, dp[101][4][4] = { 0, };
int N, K;
cin >> N >> K;
while (K--) {
int t1, t2;
cin >> t1 >> t2;
a[t1] = t2;
}
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (a[1]!=0 && i != a[1])
continue;
if (a[2]!=0 && j != a[2])
continue;
dp[2][i][j] = 1;
}
}
for (int i = 3; i <= N; i++) {
for (int j = 1; j <= 3; j++) {
if (a[i]!=0 && j != a[i])
continue;
for (int k = 1; k <= 3; k++) {
if (a[i - 1] != 0 && k != a[i - 1])
continue;
for (int l = 1; l <= 3; l++) {
if (j != k || j != l) {
dp[i][k][j] = (dp[i][k][j] + dp[i - 1][l][k]) % 10000;
}
}
}
}
}
int result = 0;
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
result = (result + dp[N][i][j]) % 10000;
}
}
cout << result;
return 0;
}
๐ ๋ฌธ์ ํ์ด
dp [n ์ผ์งธ][n-1์ผ์งธ ์์][n ์ผ์งธ ์์] = ๊ฒฝ์ฐ์ ์
์ ๊ฐ์ dp ๋ฐฐ์ด๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค
๋ฐฑ์ค์ ์๋ ์์๋ก ์๊ณ ๋ฆฌ์ฆ์ ํ ๋ฒ ํ์ดํด๋ณด๋ฉด

1์ผ์งธ์๋ 1๋ฒ ํ์คํ, 3์ผ์งธ์๋ 1๋ฒ ํ์คํ, 4์ผ์งธ์๋ 2๋ฒ ํ์คํ๋ผ๊ณ ์ง์ ์ด ๋์ด์๋ค
1์ผ์งธ๋ 1๋ฒ์ผ๋ก ์ธํ ์ด ๋์ด์๊ธฐ ๋๋ฌธ์, dp [2์ผ์งธ][1์ผ์งธ ์์=1][2์ผ์งธ ์์]๋ง dp์ ๊ฐ์ด ์ ์ฅ๋ ๊ฒ์ด๋ค
2์ผ์งธ ์์์ ์ ํด์ ธ ์์ง ์์ผ๋ฏ๋ก, ์ฌ ์ ์๋ ๊ฐ์ 1, 2, 3์ด๊ณ ๊ฒฝ์ฐ๋ ๊ฐ๊ฐ 1๊ฐ์ด๊ธฐ ๋๋ฌธ์
์๋์ ๊ฐ์ด dp์ ์ ์ฅ๋๋ค
๊ทธ ์ธ์๋ ๋ฐฐ์ด ์ด๊ธฐํ๋ก ์ธํด 0์ผ๋ก ๊ฐ์ด ์ ์ฅ๋์ด์๋ค

๊ทธ๋ค์์ธ 3์ผ ์งธ๋ฅผ ์ดํด๋ณด๋ฉด, 3์ผ์งธ์ ์์์ 1๋ฒ ํ์คํ๋ก ๊ณ ์ ์ด ๋์ด์๋ค
๋ฐ๋ผ์ dp[3์ผ์งธ][2์ผ์งธ ์์][3์ผ์งธ ์์=1]๋ง dp์ ๊ฐ์ด ์ ์ฅ ๋ ๊ฒ์ด๊ณ
2์ผ์งธ ์์์ผ๋ก ์ฌ ์ ์๋ ๊ฒ์ 1, 2, 3 ์ด 3๊ฐ์ง๊ฐ ๊ฐ๋ฅํ๋ค
์ด๋, 2์ผ์งธ์ ํ์คํ๊ฐ 1๋ฒ์ด ๋ ๊ฒฝ์ฐ 1 1 1๋ก 3์ผ ๋์ ๊ฐ์ ํ์คํ๋ฅผ ๋จน๋ ๊ฒฝ์ฐ๊ฐ ๋๋ฏ๋ก, ์ด๋ ๋ฐฐ์ฌ์์ผ์ค๋ค(if (j != k || j!= l))

๋๋จธ์ง๋ ๋์ผํ๊ฒ ์งํ๋์ด ์ต์ข ์ ์ผ๋ก 6์ด๋ผ๋ ๊ฐ์ด ๋์ถ๋๋ค

โญ ๋ฌธ์ ํ์ด ๊ฒฐ๊ณผ
