大家都知道"超級瑪麗"是乙個很善於跳躍的探險家,他的拿手好戲是跳躍,但它一次只能向前跳一步或兩步。有一次,他要經過一條長為n的羊腸小道,小道中有m個陷阱,這些陷阱都位於整數字置,分別是a1,a2,…am,陷入其中則必死無疑。顯然,如果有兩個挨著的陷阱,則瑪麗是無論如何也跳過不去的。
現在給出小道的長度n,陷阱的個數及位置。求出瑪麗從位置1開始,有多少種跳躍方法能到達勝利的彼岸(到達位置n)。
第一行為兩個整數n,m
第二行為m個整數,表示陷阱的位置
乙個整數。表示瑪麗跳到n的方案數
在這裡給出一組輸入。例如:
4 1
2
在這裡給出相應的輸出。例如:
1
資料規模和約定
40>=n>=3,m>=1
n>m;
陷阱不會位於1及n上
這道題可以用遞迴來做,定義兩個xj,記錄陷阱的位置,對應位置的值置為1,dfs有乙個引數x,表示當前步數,xj[x]!=1(沒有踩到陷阱)時,判斷x是否等於n,相等cnt++(相等即代表一種方案走到了終點),如果不等於n,在x+1或x+2的條件下繼續遞迴dsf(x+1)和dfs(x+2)。
#include
using
namespace std;
int t,xj[
100]
, m, n, cnt=0;
void
dfs(
int x)}}
intmain()
dfs(1)
; cout << cnt << endl;
return0;
}
演算法提高 超級瑪麗
演算法提高 超級瑪麗 時間限制 1.0s 記憶體限制 256.0mb 問題描述 大家都知道 超級瑪麗 是乙個很善於跳躍的探險家,他的拿手好戲是跳躍,但它一次只能向前跳一步或兩步。有一次,他要經過一條長為n的羊腸小道,小道中有m個陷阱,這些陷阱都位於整數字置,分別是a 1,a2,a m,陷入其中則必死...
演算法提高 超級瑪麗
演算法提高 超級瑪麗 問題描述 大家都知道 超級瑪麗 是乙個很善於跳躍的探險家,他的拿手好戲是跳躍,但它一次只能向前跳一步或兩步。有一次,他要經過一條長為n的羊腸小道,小道中有m個陷阱,這些陷阱都位於整數字置,分別是a1,a2,am,陷入其中則必死無疑。顯然,如果有兩個挨著的陷阱,則瑪麗是無論如何也...
演算法提高 超級瑪麗
問題描述 大家都知道 超級瑪麗 是乙個很善於跳躍的探險家,他的拿手好戲是跳躍,但它一次只能向前跳一步或兩步。有一次,他要經過一條長為n的羊腸小道,小道中有m個陷阱,這些陷阱都位於整數字置,分別是a1,a2,am,陷入其中則必死無疑。顯然,如果有兩個挨著的陷阱,則瑪麗是無論如何也跳過不去的。現在給出小...