ALGORITHM

11057_오르막수

서울소시민 2017. 9. 25. 20:54

문제: 

00, 01, 119 이렇게 각 자리가 뒤로 갈수록 커지는 수를 오르막수라고 한다. 입력값이 주어졌을 때 입력값의 길이 만큼의 오르막수가 몇개인지

구하라





#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;

int main() {

	int dab = 0;
	int input;
	cin >> input;

	int **dp = new int*[input];//열을 먼저만들고
	for (int i = 0; i < input; i++) {//열만큼 반복하고
		dp[i] = new int[10];//열에 행하나씩 넣는다.
		memset(dp[i], 0, (sizeof(int)*10));//memset으로 0을 넣어준다.
	}//2차원배열 선언

	for (int r = 0; r < 10; r++) {
		dp[0][r] = 1;
		
	}//먼저 초항을 1로 지정한다 이 문제는 갯수를 세는 것이므로 1로 초기화 해주어 갯수를 세어줄 수 있다.

	for (int a = 1; a < input; a++) {
		for (int b = 0; b < 10; b++) {
			for (int c = b; c < 10; c++) {
				dp[a][b] = (dp[a][b] % 10007 + dp[a - 1][c] % 10007) % 10007;
			}
			//cout << "dp[" << a << "][" << b << "] = " << dp[a][b] << endl;// 결과값을 중간중간 볼 수 있는 명령문
		}
	}

	//0 1 2 3 4 5 6 7 8 9 --dp[0][0] ~ dp[0][9];

	//00 01 02 03 ... 09 --dp[1][0] = dp[0][0]+dp[0][1]+..dp[0][9];
	//   11 12 13 ... 19 --dp[1][1] = dp[0][1]+dp[0][2]+..dp[0][9];
	//......................................
	//	....			 --dp[1][9] = dp[0][9]


	
	for (int d = 0; d < 10; d++) {
		dab += dp[input - 1][d]%10007;
	}


	cout << dab%10007;
	return 0;
}


'ALGORITHM' 카테고리의 다른 글

집합_11723  (0) 2017.09.28
9095_1,2,3나누기  (0) 2017.09.26
1065_한수  (0) 2017.09.23
4673_셀프넘버  (0) 2017.09.22
java연습_2920_음계  (0) 2017.09.21