[白俊]1727号:2×nタイル2

1973 ワード

試行1:エラー

#include <iostream>
#include <vector>

using namespace std;

int n; //직사각형 타일 너비


int main()
{
    //입력 
    cin>>n;
    
    vector<int> dp(1001); // n별로 만들수 있는 경우의수를 배열로 생성 
    
    dp[0]=1;
    dp[1]=1;
        
    for(int i=2; i<=n; i++){
        dp[i] = dp[i-1] + dp[i-2]*2;
    }
    cout<<dp[n]%10007<<'\n';

    return 0;
}
-n 1から1000まで、dp[0]を要求する必要はありません.
-型を求める演算は最後ではなくint範囲を超える場合がありますので、中間型演算が必要です
?点火式に影響はありませんか?どうして10007なの?

試行2:成功(補足が必要)

#include <iostream>
#include <vector>

using namespace std;

int n; //직사각형 타일 너비

int main()
{
    //입력 
    cin>>n;
    
    vector<int> dp(1001); //dp[n] = 각 너비가 n인 타일 채우는 경우의 수. n은 1부터 1000까지
    dp[1]=1;
    dp[2]=3;
        
    for(int i=3; i<=n; i++){
        dp[i] = dp[i-1] + dp[i-2]*2; 
        dp[n]%=10007;
    }
    cout<<dp[n]<<'\n';

    return 0;
}
+モジュラー演算の変更
-dp配列は1001に作成する必要はありません.nのみ生成することが望ましい.
-main関数ではなくfilltile()関数を個別に作成します.