遞歸--算法提高-超級瑪麗
阿新 • • 發佈:2018-01-28
描述 color ++ col 行為 整數 std str 兩個
問題描述 大家都知道"超級瑪麗"是一個很善於跳躍的探險家,他的拿手好戲是跳躍,但它一次只能向前跳一步或兩步。有一次,他要經過一條長為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上
有問題的代碼
#include <iostream> #include <cmath> using namespace std; int n; int a[100]; int b[100]; int ans=0; void dfs(int i) { if(i==n){ ans++; } else{ for(int j=0;j<pow(2,n);j++) { if(b[j]!=1) { if(b[j+1]==0) dfs(i+1); else dfs(i+2); } } } } int main() { int m; cin>>n; cin>>m; for(int i=0;i<m;i++) { cin>>a[i]; b[a[i]]=1; } dfs(0); return 0; }
遞歸--算法提高-超級瑪麗