1. 程式人生 > >遞歸--算法提高-超級瑪麗

遞歸--算法提高-超級瑪麗

描述 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;
}

  

遞歸--算法提高-超級瑪麗