1. 程式人生 > >7-5 跳一跳(30 分)

7-5 跳一跳(30 分)

做了 cout ria AR -o stream .... urn 現在

有一條長度為n的賽道,其中有m個陷阱,這些陷阱都位於整數位置,分別是a1,a2,....am,陷入其中則必死無疑。

開始時小人站在位置1,小人一次只能向前跳一步或兩步。顯然,如果有兩個挨著的陷阱,小人是無論如何也跳不過去的。

現在給出賽道的長度n,陷阱的個數m及位置。問有多少種跳躍方案可以讓小人到達終點(位置n)。

數據規模和約定:(  40>=n>=3, m>=1, n>m;  陷阱不會位於1及n上 )

輸入格式:

第一行為兩個整數n,m 第二行為m個整數,表示陷阱的位置

輸出格式:

一個整數。表示小人跳到n的方案數

輸入樣例:

在這裏給出一組輸入。例如:

8 2
5 7

輸出樣例:

在這裏給出相應的輸出。例如:

3
網上搜了搜題解,發現都是用dp做的,然鵝我不會dp,就用深搜做了以下,感覺不難。
 1 #include <iostream>
 2 #include <string>
 3 #include <string.h>
 4 using namespace std;
 5 int n, m, counts;
 6 int a[41];
 7 void dfs(int x, int step) {
 8     if(x > n) {
 9         return;
10     } 
11     if(x == n) {
12 counts++; 13 return; 14 } 15 if(a[x+1] != 1) { 16 dfs(x+1, step+1); 17 } 18 if(a[x+2] != 1) { 19 dfs(x+2, step+2); 20 } 21 } 22 int main() 23 { 24 25 cin >> n >> m; 26 //memset(a,1,sizeof(a)); 27 while(m--) { 28 int
x; 29 cin >> x; 30 a[x] = 1; 31 } 32 dfs(1, 0); 33 cout << counts; 34 }

 

7-5 跳一跳(30 分)