본문으로 바로가기

9095

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

풀이코드

#include <iostream>
using namespace std;

// 9095

int main(){
	int N[100], T, maxN = -1;
    int n[11];
	
	n[1] = 1;
    n[2] = 2;
	n[3] = 4;

	cin >> T;
	cin.ignore();
		
	for(int i = 0; i < T; i++){
		cin >> N[i];
		if(maxN < N[i]) maxN = N[i];
	}

    for (int i = 4; i <= maxN; i++) {
        n[i] = n[i - 1] + n[i - 2] + n[i - 3];
    }

	for(int i = 0; i < T; i++){
		cout << n[ N[i] ] << endl;
	}
}

 

해설

 

처음 점화식을 찾는 과정만 착실히 밟으면 구현 자체는 어렵지 않았다.

$$a_n = a_{n-1} + a_{n-2} + a_{n-3}$$

테스트 케이스 중 가장 큰 N 값을 찾아서, 전체 범위인 11까지 구하는 것이 아니라, N 까지만 점화식을 풀어나가는 것이 더 빠른 구현의 핵심이었다.

반응형

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

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