[白俊]9095号:1.2.3加

1225 ワード

#include <iostream>
#include <vector>

using namespace std;

int t,n; // 테스트케이스 개수, 1 2 3합으로 나타낼 정수 n
vector<int> dp(1001); // 정수를 1,2,3의 합으로 나타내는 방법

int main()
{
    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];
    }
    
    //입력
    cin>>t;
    
    while(t--){
        cin>>n;
        cout<<dp[n]<<'\n';
    }
    return 0;
}
-dp配列は12個集める必要がありますか?
+入力値に出力値を指定できます.
+最初は点火式がなかなか見つからなかった.まず1.2.3.4の状況を考えてみましょう
dp[1] = 1 //1
dp[2] = 2 //1+1, 2
dp[3] = 4 //1+2, 1+1+1, 2+1, 3
dp[4] = 7
//1+3,
1+1+2, 2+2,
1+2+1, 1+1+1+1, 2+1, 3+1
->dp[4]は1に3を加え、2に2を加え、3に1を加える.1から3までしかないので、dp[i]=dp[i-1]+dp[i-2]+dp[i-3]です.(ただしi>3)