7-5 跳一跳(30 分)
阿新 • • 發佈:2018-06-10
做了 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 intx; 29 cin >> x; 30 a[x] = 1; 31 } 32 dfs(1, 0); 33 cout << counts; 34 }
7-5 跳一跳(30 分)