https://www.acmicpc.net/problem/10844
๋ฌธ์
45656์ด๋ ์๋ฅผ ๋ณด์.
์ด ์๋ ์ธ์ ํ ๋ชจ๋ ์๋ฆฌ์ ์ฐจ์ด๊ฐ 1์ด๋ค. ์ด๋ฐ ์๋ฅผ ๊ณ๋จ ์๋ผ๊ณ ํ๋ค.
N์ด ์ฃผ์ด์ง ๋, ๊ธธ์ด๊ฐ N์ธ ๊ณ๋จ ์๊ฐ ์ด ๋ช ๊ฐ ์๋์ง ๊ตฌํด๋ณด์. 0์ผ๋ก ์์ํ๋ ์๋ ๊ณ๋จ์๊ฐ ์๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. N์ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ ๋ต์ 1,000,000,000์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
์ถ๋ ฅ์ ์ ๋ต์~~๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค. ๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ๋ณด๋ dp ๋ถํฐ ๋ ์ค๋ฅธ๋ค
dp๋ก ๊ฐ๋ณด์.
dp[i][k] = ๊ธธ์ด๊ฐ i์ธ ๊ณ๋จ ์ ์ค ๋งจ ๋ค ์ซ์๊ฐ k์ธ ๊ฒฝ์ฐ์ ์
dp[i-1] ์ ๋ง์ง๋ง ์ซ์ k๋ผ๋ฉด ๊ทธ ๋ค์ ์ฌ ์ ์๋ ์ซ์๋
k=0 ์ธ ๊ฒฝ์ฐ -> 1 -> 1๊ฐ
k=1~8 ์ธ ๊ฒฝ์ฐ -> k-1, k+1 -> 2๊ฐ
k=9 ์ธ ๊ฒฝ์ฐ -> 8 -> 1๊ฐ
์ฆ
dp[i][0] = dp[i-1][1];
dp[i][k] = dp[i-1][k-1] + dp[i-1][k+1];
dp[i][9] = dp[i-1][8];
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
using namespace std;
const int MOD = 1000000000;
int main() {
int n;
cin >> n;
vector<vector<int>> dp(n+1, vector<int>(10));
dp[1] = {0,1,1,1,1,1,1,1,1,1};
int next;
for(int i=2; i<=n; i++) {
dp[i][0] = dp[i-1][1];
for(int j=0; j<10; j++) {
if(j==0) {
next = dp[i-1][1];
} else if(j==9) {
next = dp[i-1][8];
} else {
next = dp[i-1][j-1] + dp[i-1][j+1];
}
dp[i][j] = next%MOD;
}
}
long long ans=0;
for(int j=0; j<10; j++) {
ans += dp[n][j];
}
cout << ans%MOD;
}
๋๋จธ์ง ์ฐ์ฐ ์์ง ๋ง์
๊ณ์ฐ ๊ณผ์ ๊ณผ ๋ต์ ๋ชจ๋ ํฌํจ์์ผ์ผํ๋ค
'๐๏ธ ICPC Sinchon > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 1890๋ฒ: ์ ํ (0) | 2023.11.14 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 1309๋ฒ: ๋๋ฌผ์ (0) | 2023.11.13 |
[BOJ][C++] ๋ฐฑ์ค 1912๋ฒ: ์ฐ์ํฉ (0) | 2023.11.03 |
[BOJ][C++] ๋ฐฑ์ค 2491๋ฒ: ์์ด (0) | 2023.04.17 |
[BOJ][C++] ๋ฐฑ์ค 9625๋ฒ: BABBA (0) | 2023.04.13 |