问题一:
首先看一个最经典的问题:上台阶问题。P1255 数楼梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
我们首先看一下,如何用DFS的方法进行解题。
假设我们要上到第5级台阶:
可以看出上到第五级台阶时,可能是由第4级上去的,也可能是从第3级上去的。接下来以此类推。
所有我们很容易想到一个方程:假设F(x)表示上到第X级台阶的方案数。那么不难看出:
F(x) = F(x-1) + F(x-2)
一开始不要多想直接按照常规的DFS进行,
#include<iostream>
using namespace std;
int n;
int dfs(int x)
{
if(x==1) return 1;
else if(x==2) return 2;
return dfs(x-1) + dfs(x-2);
}
int main()
{
cin>>n;
cout<<dfs(n)<<endl;
return 0;
}
但是这个过不了;
再看上面的图,发现很多都算了2遍,比如3。
那么来记忆化搜索:
问题二:
1049. 大盗阿福 - AcWing题库
阿