演算法提高
超級瑪麗
問題描述
大家都知道"超級瑪麗"是乙個很善於跳躍的探險家,他的拿手好戲是跳躍,但它一次只能向前跳一步或兩步。有一次,他要經過一條長為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上
//dfs,選擇走一步還是走兩步
#include
#include
int trap[50],book[50];
int n,m,ans;
void dfs(int step)
//選擇的時候只寫滿足的條件if
if(step+2<=n&&book[step+2]==0)
//
走兩步的時候,走兩步後到的地方必須不能是陷阱,而且也不能跳出去,step!=n-1,或者step+2<=n,若跳出去的情況沒考慮到,則會多一種方案。
dfs(step+2);
if(book[step+1]==0)//跳一步的時候,只要滿足跳到的地方不是陷阱,不存在跳出去的時候
dfs(step+1);
return;
}int main()
if(flag==0)
ans=0;
book[1]=1;
dfs(1);
printf("%d",ans);
return 0;
}
演算法提高 超級瑪麗
演算法提高 超級瑪麗 時間限制 1.0s 記憶體限制 256.0mb 問題描述 大家都知道 超級瑪麗 是乙個很善於跳躍的探險家,他的拿手好戲是跳躍,但它一次只能向前跳一步或兩步。有一次,他要經過一條長為n的羊腸小道,小道中有m個陷阱,這些陷阱都位於整數字置,分別是a 1,a2,a m,陷入其中則必死...
演算法提高 超級瑪麗
問題描述 大家都知道 超級瑪麗 是乙個很善於跳躍的探險家,他的拿手好戲是跳躍,但它一次只能向前跳一步或兩步。有一次,他要經過一條長為n的羊腸小道,小道中有m個陷阱,這些陷阱都位於整數字置,分別是a1,a2,am,陷入其中則必死無疑。顯然,如果有兩個挨著的陷阱,則瑪麗是無論如何也跳過不去的。現在給出小...
演算法提高 超級瑪麗
大家都知道 超級瑪麗 是乙個很善於跳躍的探險家,他的拿手好戲是跳躍,但它一次只能向前跳一步或兩步。有一次,他要經過一條長為n的羊腸小道,小道中有m個陷阱,這些陷阱都位於整數字置,分別是a1,a2,am,陷入其中則必死無疑。顯然,如果有兩個挨著的陷阱,則瑪麗是無論如何也跳過不去的。現在給出小道的長度n...