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;
}