티스토리 뷰

알고리즘/BOJ

[백준] 15989 1,2,3 더하기 4

세진짱 2020. 1. 28. 18:18

dp 문제다

테이블을 잡을 때 d[n][k]로 잡았다

숫자 n을 만들 때 마지막 수가 k인 경우의 수다

 

그럼 이 테이블을 사용해서 계속 채워나갈 수 있다

중복이 없다고했으니 우리는 정렬했다고 가정하고 마지막수가 가장 큰 수라고 생각하자

그럼 마지막 수가 1,2,3 오는 경우를 생각하면

d[n][2] = d[n-2][1~2]가 된다

왜냐면 마지막에 오는 가장 큰 수는 2이므로 1부터 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
#include <iostream>
using namespace std;
int n;
int d[10010][4];
 
int main() {
    scanf(" %d"&n);
 
    d[1][1= d[2][1= d[2][2= d[3][1= d[3][2= d[3][3= d[4][1= d[4][3= 1;
    d[4][2= 2;
 
    for (int i = 5; i <= 10000; i++) {
        for (int j = 1; j <= 3; j++) {
            for (int k = 1; k <= j; k++) {
                d[i][j] += d[i - j][k];
            }
        }
    }
 
    for (int i = 0; i < n; i++) {
        int k; scanf(" %d"&k);
        printf("%d\n", d[k][1+ d[k][2+ d[k][3]);
    }
}
 
 

'알고리즘 > BOJ' 카테고리의 다른 글

[백준] 15662 톱니바퀴 (2)  (0) 2020.01.28
[백준] 15558 점프 게임  (0) 2020.01.28
[백준] 6087 레이저 통신  (0) 2020.01.28
[백준] 12100 2048 (Easy)  (0) 2020.01.28
[백준] 13460 구슬 탈출 2  (0) 2020.01.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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 30 31
글 보관함