출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

상세 컨텐츠

본문 제목

백준 9095 1, 2, 3 더하기(dynamic programming)

알고리즘

by 장동균 2020. 4. 17. 18:49

본문

 

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
32
#include <iostream>
 
using namespace std;
 
int num;
int dp[11];
 
void makeSum()
{
    dp[0= 0;
    dp[1= 1;
    dp[2= 2;
    dp[3= 4;
    for (int i = 4; i < 11; i++)
    {
        dp[i] = dp[i - 1+ dp[i - 2+ dp[i - 3];
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    makeSum();
    cin >> num;
    while (num--)
    {
        int tmp;
        cin >> tmp;
        cout << dp[tmp] << "\n";
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

1-1개
1
2-2개
1 1               
2                  
3-4개
1 1 1            
1 2               
2 1              
3
4 -7개             
1 1 1 1            
1 1 2             
1 2 1            
2 1 1
2 2 
1 3 
3 1
5-13개     
1 1 1 1 1  
1 1 1 2     
1 1 2 1      
1 2 1 1     
2 1 1 1
1 2 2
2 1 2
2 2 1
1 1 3
1 3 1
3 1 1
2 3
3 2
6 --24개
1 1 1 1 1 1
1 1 1 1 2
1 1 1 2 1
1 1 2 1 1
1 2 1 1 1
2 1 1 1 1
1 1 1 3
1 1 3 1
1 3 1 1
3 1 1 1 
1 1 2 2
1 2 1 2
2 1 1 2
2 1 2 1
2 2 1 1
1 2 2 1
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
2 2 2
3 3

 

dp 문제라는 것을 알고 풀다보니 그냥 쭉 써놓고 점화식을 찾아서 풀었다. dp[i]=dp[i-1]+dp[i-2]+dp[i-3](i>=4)

이 문제는 보고 dp 문제라는 것을 쉽게 알아차릴 수 있을 것 같은데 다른 dp문제를 봤을 때 바로 dp문제임을 알아채고 이런 식으로 풀어낼 수 있을지 조금 걱정이다.

관련글 더보기

댓글 영역