1. 程式人生 > >51Nod 1031 骨牌覆蓋 | Fibonacci

51Nod 1031 骨牌覆蓋 | Fibonacci

數量 col 感謝 輸出 include define sca eight 示例

技術分享

Input
輸入N(N <= 1000)
Output
輸出數量 Mod 10^9 + 7
Input示例
3
Output示例
3

思路:對於第x塊骨牌的情況,我們用a[x]表示其方法數;其比x-1塊骨牌時多了一塊骨牌,多出的骨牌有兩種放法:

1.我們可以直接將其豎著添加在最末端,那麽其排列數就為就是前x-1塊骨牌的排列數,即為a[x-1];

2. 我們也可以將其和其前面一塊骨牌一起橫著放,那麽其排列數就是前x-2塊骨牌的排列數,即為a[x-2];

所以有 a[x]=a[x-1]+a[x-2];

#include <bits/stdc++.h>
using namespace
std; typedef long long LL; #define rep(i,a,n) for(int i = a; i < n; i++) #define repe(i,a,n) for(int i = a; i <= n; i++) #define per(i,n,a) for(int i = n; i >= a; i--) #define clc(a,b) memset(a,b,sizeof(a)) #define INF 1e18+100 #define N 1010 #define MOD 1010 typedef long long LL; const int mod=1e9+7
; int main(){ int a[N], n; a[0]=1, a[1]=1; scanf("%d",&n); for(int i=2; i<=n; i++){ a[i]=(a[i-1]+a[i-2])%mod; } printf("%d\n",a[n]); return 0; }

感謝:http://www.cnblogs.com/geloutingyu/p/6280350.html

51Nod 1031 骨牌覆蓋 | Fibonacci