中國石油大學新生訓練賽第四場:Dominoc

skylonghun6發表於2020-11-17

Alice最近在玩多米諾骨牌,她突發奇想,想用她的骨牌去鋪一個2×n的長方形。Alice的骨牌是1×2的長方形木片,在鋪骨牌的過程中她希望能滿足如下要求:
1.骨牌必須橫向或豎向放置;
2.骨牌不能超出2×n的長方形的邊界;
3.骨牌之間不能有重疊;
4.骨牌需要將長方形鋪滿(即,鋪2×n的長方形需要用n塊骨牌)。
請問Alice有多少種方案,用1×2的骨牌鋪滿2×n的長方形?
例如,n=3時,鋪2×3的長方形,骨牌的鋪放方案有三種,如下圖:
在這裡插入圖片描述
輸入
輸入一行,一個正整數n(3≤n≤1000),表示要鋪滿的長方形的大小為2×n。
輸出
輸出一個數,為滿足上述要求的骨牌鋪放方案數除以1,000,000,007的餘數。
樣例輸入 Copy
3
樣例輸出 Copy
3
觀察前幾項得出a[i]=a[i-1]+a[i-2];
程式碼

#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
    long long n;
    scanf("%lld",&n);
    int i,a[1000]= {0};
    a[1]=1,a[2]=2;
    for(i=3; i<=n; i++)
    {
        a[i-1]=a[i-1]%1000000007;
        a[i-2]=a[i-2]%1000000007;
        a[i]=(a[i-1]+a[i-2])%1000000007;
    }
    printf("%d",a[n]);
    return 0;
}

相關文章