PS/BOJ

[백준 BOJ][DP] 9095 1, 2, 3 더하기

Jubil 2018. 5. 27. 07:59
반응형

9095_1, 2, 3 더하기

 

링크

https://www.acmicpc.net/problem/9095

 

풀이


 

정수 n1, 2, 3의 조합으로 나타내는 방법을 찾아야 합니다.

그 방법은 n-1까지의 조합 + 1 n-2까지의 조합 + 2n-3까지의 조합 + 3이 있을 것입니다.

 

41, 2, 3의 조합으로 나타내는 방법을 위를 통해 구해보면,

 

n-1까지의 조합 -> 3까지의 조합

1 + 1 + 1    + 1

1 + 2        + 1

2 + 1        + 1

3            + 1

 

n-2까지의 조합 -> 2까지의 조합

1 + 1    + 2

2        + 2

 

n-3까지의 조합 -> 1까지의 조합

1     + 3

 

이렇게 7가지가 됩니다.

 

점화식을 세워보면 DP[n] = DP[n-1] + DP[n-2] + DP[n-3]   (n >= 4)   이 됩니다.

 

DP[1], DP[2], DP[3]은 미리 구해 놓아야 합니다.

아까 위에서 해봤기 때문에 쉽게 구할 수 있습니다.

DP[1] = 1, DP[2] = 2, DP[3] = 4 입니다.

 

코드로 구현하겠습니다. 주의할 점은 n11보다 작은 양수, 10 이하의 양수이기 때문에 배열은 11로 잡아야 합니다.

 

 

코드

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

//9095_1, 2, 3 더하기

#include <iostream>

using namespace std;

 

int DP[11= { 0124 };

 

int f(int n) {

    if (DP[n]) return DP[n];

    return DP[n] = f(n - 1+ f(n - 2+ f(n - 3);

}

 

int main() {

    int T;

    int n;

    int i;

 

    f(10);            //10까지 미리 구해서 배열에 넣어둠

 

    cin >> T;

 

    for (i = 0; i < T; ++i) {

        cin >> n;

        cout << DP[n] << endl;

    }

 

    return 0;

}

Colored by Color Scripter

cs

 



반응형

'PS > BOJ' 카테고리의 다른 글

[백준 BOJ][DP] 10844 쉬운 계단 수  (0) 2018.06.01
[백준 BOJ][DP] 1932 정수 삼각형  (0) 2018.06.01
[백준 BOJ][DP] 11727 2xn 타일링 2  (5) 2018.05.27
[백준 BOJ][DP] 11726 2xn 타일링  (0) 2018.05.27
[백준 BOJ] 1152 단어의 개수  (2) 2018.05.16