본문으로 바로가기

11057 오르막수

category ps/다이나믹 프로그래밍 2021. 7. 11. 10:19

풀이코드

#include <iostream>
#include <cstdio>
using namespace std;
const int mod = 10007;
// 11057

int main(){
	int dp[1001][10] ={0}, length;
	int result = 0;
	
	cin >> length;	
	
	for(int &x : dp[1]){
		x = 1;
	}
	
	for(int i = 2; i <= length; i++){
		for(int j = 0; j < 10; j++){
			for(int k = 0; k <= j; k++){
				dp[i][j] += dp[i - 1][k];
			}
			dp[i][j] %= mod;
		}
		
	}
	
	for(int i = 0; i < 10; i++){
		result += dp[length][i];
	}
	
	cout << result % mod << endl;
	
}

 

해설

10844 번 계단 수를 풀고 와서 그런지 점화식 자체를 구성하는 것은 쉬웠고 실제로 구현하는 것은 쉬웠다.

끝 수가 0이라고 생각하면 그 전 길이의 끝 수가 0인 것을 계승. 1이라면 0과 1. 2라면 0과 1과 2. ...

$$ a_{n k} = \displaystyle\sum_{j=0}^{k} a_{n-1 j} $$

이러한 방식이다.

하지만 제출할수록 틀리고 알 수 없는 답이 나오는 경우가 있었는데 찾다보니 결국 배열을 초기화 하지 않아서 생긴 문제 였다. dp 라는 배열은 계속 + 만 하는 배열이기에 초기화를 꼭 시켜줬어야 했다. 하지 않아서 dump 값이 중간에 들어가 오류가 발생하였다.

반응형

'ps > 다이나믹 프로그래밍' 카테고리의 다른 글

9465 스티커  (0) 2021.07.14
2193 이친수  (0) 2021.07.11
10844 쉬운 계단 수  (0) 2021.07.10
9095  (0) 2021.07.10
11727  (0) 2021.07.10