總時間限制: 1000ms 內存限制: 65536kB
描述
有一個方格矩陣,矩陣邊界在無窮遠處。我們做如下假設:
a. 每走一步時,只能從當前方格移動一格,走到某個相鄰的方格上;
b. 走過的格子立即塌陷無法再走第二次;
c. 只能向北、東、西三個方向走;
請問:如果允許在方格矩陣上走n步,共有多少種不同的方案。2種走法只要有一步不一樣,即被認爲是不同的方案。
輸入
允許在方格上行走的步數n(n <= 20)
輸出
計算出的方案數量
樣例輸入
2
樣例輸出
7
解法: f[i]表示走 i 格的方案數。
狀態轉移方程推導如下——
設l[i],r[i],u[i]分別爲第 i 步向西、東、北的方案數,f[i]爲總方案數。
l[i]=l[i-1]+u[i-1], r[i]=r[i-1]+u[i-1], u[i]=l[i-1]+r[i-1]+u[i-1]
f[i]=l[i]+r[i]+u[i]
=2*l[i-1]+2*r[i-1]+3*u[i-1]
=2*f[i-1]+u[i-1]
=2*f[i-1]+f[i-2]
#include <iostream>
#include<cstdio>
using namespace std;
int f[10000];
int main()
{
int n;cin>>n;
f[1]=3;f[2]=7;//初始狀態
for (int i=3;i<=n;i++)
f[i]=2*f[i-1]+f[i-2];
cout<<f[n]<<endl;
return 0;
}