動態規劃練習題(2)踩方格

總時間限制: 1000ms 內存限制: 65536kB 
描述 
有一個方格矩陣,矩陣邊界在無窮遠處。我們做如下假設: 
a. 每走一步時,只能從當前方格移動一格,走到某個相鄰的方格上; 
b. 走過的格子立即塌陷無法再走第二次; 
c. 只能向北、東、西三個方向走; 
請問:如果允許在方格矩陣上走n步,共有多少種不同的方案。2種走法只要有一步不一樣,即被認爲是不同的方案。

輸入 
允許在方格上行走的步數n(n <= 20) 
輸出 
計算出的方案數量 
樣例輸入 

樣例輸出 

解法: 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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章