https://www.acmicpc.net/problem/10844
점화식 dp[N][i] = dp[N-1][i-1] + dp[N-1][i+1] 이용
여기서 N 은 자릿수, i는 끝나는 수
1. 반복문
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 | #include <iostream> #define mod 1000000000 using namespace std; int main(){ int dp[101][10] = {}; for(int i = 0; i < 10; i++){ dp[1][i] = 1; } int N; cin >> N; for(int i = 2; i <=N; i++){ for(int j = 0; j < 10; j++){ if(j == 0) dp[i][j] = dp[i-1][1]; else if(j == 9) dp[i][j] = dp[i-1][8]; else dp[i][j] = dp[i-1][j-1]+ dp[i-1][j+1]; dp[i][j] %=mod; } } int sum = 0; for(int i = 1; i<10; i++){ sum=(sum+dp[N][i]) %mod; } cout << sum%mod; } | cs |
2. 재귀
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 | #include <iostream> #define mod 1000000000 using namespace std; int dp[101][10]={0}; int step(int N,int x); int main(){ int N; int sum = 0; cin >> N; for(int i =0;i<10;i++) sum = (sum+step(N,i)) % mod; cout << sum; } int step(int N,int x){ if(N==1) return x == 0 ? 0:1; int& ref = dp[N][x]; if(ref) return ref; if(x == 0) return ref = step(N-1,1)%mod; if(x == 9) return ref = step(N-1,8)%mod; return ref = (step(N-1,x-1) + step(N-1,x+1)) %mod; } | cs |
반응형
'프로그래밍 > 문제풀이' 카테고리의 다른 글
백준 2293 (동전1) (0) | 2018.11.07 |
---|---|
백준 2193 (이친수) (0) | 2018.11.06 |
백준 2156(포도주 시식) (0) | 2018.11.03 |
백준 1107 (리모컨) (0) | 2018.11.03 |
백준 1652 (누울 자리를 찾아라) (0) | 2018.11.03 |