λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ“ μ•Œκ³ λ¦¬μ¦˜/BOJ

[C++/λ°±μ€€] 9095 : 1, 2, 3 λ”ν•˜κΈ°

문제

μ •μˆ˜ 4λ₯Ό 1, 2, 3의 ν•©μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ” 방법은 총 7가지가 μžˆλ‹€. 합을 λ‚˜νƒ€λ‚Ό λ•ŒλŠ” 수λ₯Ό 1개 이상 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

  • 1+1+1+1
  • 1+1+2
  • 1+2+1
  • 2+1+1
  • 2+2
  • 1+3
  • 3+1

μ •μˆ˜ n이 μ£Όμ–΄μ‘Œμ„ λ•Œ, n을 1, 2, 3의 ν•©μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ” λ°©λ²•μ˜ 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 개수 Tκ°€ 주어진닀. 각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” ν•œ μ€„λ‘œ 이루어져 있고, μ •μˆ˜ n이 주어진닀. n은 μ–‘μˆ˜μ΄λ©° 11보닀 μž‘λ‹€.

좜λ ₯

각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ§ˆλ‹€, n을 1, 2, 3의 ν•©μœΌλ‘œ λ‚˜νƒ€λ‚΄λŠ” λ°©λ²•μ˜ 수λ₯Ό 좜λ ₯ν•œλ‹€.


 

λ°±μ€€ 싀버 3 ν‹°μ–΄. DP λ¬Έμ œμ˜€κ³  DPλŠ” 점화식을 μ°ΎλŠ”κ²Œ 항상 μ–΄λ ΅λ‹€;

 

1은 1둜만 ν‘œν˜„ κ°€λŠ₯. (1)

2λŠ” 1+1, 2둜 ν‘œν˜„ κ°€λŠ₯. (2)

3은 1+ (2의 경우의 수), 2+ (1의 경우의 수), 3 . (4)

 

4λŠ”

1+ (3의 경우의 수),

2+ (2의 경우의 수),

3+ (1의 경우의 수)

 

5λŠ”

1+ (4의 경우의 수),

2+ (3의 경우의 수),

3+ (2의 경우의 수)

 

λ”°λΌμ„œ 

 dp[j] = dp[j - 1] + dp[j - 2] + dp[j - 3] λΌλŠ” 점화식이 λ„μΆœλœλ‹€.
 

 

#include <iostream>
#include <vector>
using namespace std;
// λ°±μ€€ 9095
int main(){
    int t;
    int n;
    cin >> t;
    int dp[11]={0,};
    dp[1] = 1;
    dp[2] = 2;
    dp[3] = 4;

    for (int i = 0; i < t; ++i) {
        cin >> n;
        for (int j = 4; j <= n; ++j){
            dp[j] = dp[j - 1] + dp[j - 2] + dp[j - 3];
        }
        cout << dp[n] << "\n";
    }
        return 0;
}