1.AcWing 跳台阶
第一种方法:暴力搜索DFS
#include <iostream>
using namespace std;int dfs(int n)
{if(n == 1) return 1;else if(n == 2) return 2;else return dfs(n-1)+dfs(n-2);
}int main()
{int x; cin>>x;cout<<dfs(x)<<endl;return 0;
}
显然如果数据范围大一点的话 就过不了 !!! 所以拿出我们的神奇------>记忆化搜索
第二种方法:记忆化搜索
#include <iostream>
using namespace std;const int N = 10000;int mem[N],t;int dfs(int n)
{if(mem[n]) return mem[n];int sum = 0;if(n == 1) sum = 1;else if(n == 2) sum = 2;else sum = dfs(n-1)+dfs(n-2);mem[n] = sum;return sum;
}int main()
{int t; cin>>t;cout<<dfs(t)<<endl;return 0;
}
第三种:递推
#include <iostream>
using namespace std;const int N = 40;int f[N],n;int main()
{f[1] = 1,f[2] = 2;cin>>n;if(n == 1 || n == 2){cout<<f[n]<<endl;return 0;}for(int i=3;i<=n;i++){f[i] = f[i-1]+f[i-2];}cout<<f[n]<<endl;return 0;
}