标签:数据规模 eof size ace turn return string ccf font
有一条长度为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 }
标签:数据规模 eof size ace turn return string ccf font
原文地址:https://www.cnblogs.com/wzy-blogs/p/9161485.html