踩方格 動態規劃,兩種遞推

2022-07-03 17:09:13 字數 1197 閱讀 1936

描述
有乙個方格矩陣,矩陣邊界在無窮遠處。我們做如下假設:

a.    每走一步時,只能從當前方格移動一格,走到某個相鄰的方格上;

b.    走過的格仔立即塌陷無法再走第二次;

c.    只能向北、東、西三個方向走;

請問:如果允許在方格矩陣上走n步,共有多少種不同的方案。2種走法只要有一步不一樣,即被認為是不同的方案。

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

2
樣例輸出
7

//本題給了兩種遞推的寫法

/*兩種方法的思路總結:

都是用步數i作為迭代量

然後考慮每一步和前一步的關係

第一種方法是找出三向點和二向點的關係

第二種方法是找出當前點是由三個方向過來的,這三個方向分別又是由...過來的

再找出遞推關係,再推導化簡,成功優化為一元狀態轉移方程

*////

ps.希望一年後我也能有這麼強大的acm能力

//特別感謝蔡軍帥的這篇博文讓我學會這題

//他的部落格:

#include#define ll long long

using

namespace

std;

/*每乙個三向的點下一步會生成乙個三向的點和兩個雙向的點

//@3 => @3 +@2 +@2

每乙個雙向的點下一步會生成乙個三向的點和乙個雙向的點

//@2 => @3 +@2

這個可以畫個圖理解模擬一下

*/int a3[25];//

關於三向點的陣列

int a2[25];//

關於二向點的陣列

intmain()

cout

<3+a2[n]*2

//@3代表有三種走法,@2代表有兩種走法

//直接輸出3*a3[n]+2*a2[n]就好了

return0;

}//本題另一種寫法

//感謝konjac的博文讓我學會這題

//他的部落格:

#includeusing

namespace

std;

int f[25

];int

main()

動態規劃 踩方格

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

4982 踩方格 動態規劃

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

動態規劃練習16 踩方格

題目簡要 描述有乙個方格矩陣,矩陣邊界在無窮遠處。我們做如下假設 a.每走一步時,只能從當前方格移動一格,走到某個相鄰的方格上 b.走過的格仔立即塌陷無法再走第二次 c.只能向北 東 西三個方向走 請問 如果允許在方格矩陣上走n步,共有多少種不同的方案。2種走法只要有一步不一樣,即被認為是不同的方案...