前几天去福州参加了一个冬令营,总结如下
Day 1 枚举+dfs
枚举是一种很暴力的方法,就是把可能性一个个列出来,判断可行性和最优解,来一道经典例题
填数游戏:
AB(ABC互不相等)
* A
————
CCC
这道题·相信就不用分析了,伪代码如下
for(int a=10;a<=10;++a)
for(int b=10;b<=10;++b)
for(int c=0;c<=10;++c)
if((a*10+b)*a==c*11
dfs是深度优化搜索,主要的方法有递归回溯,思想为从某个状态开始,先朝某个方向尝试一步到达新状态并搜索新状态,当搜索玩新状态时,撤销这一步,并朝另一个方向尝试,知道其中一步找到了我们所要的结果,或者遍历完了所有的可能性。简单地说,递归回溯就是选一个方向,不停地试下去,直到检查所有的可能性确认怎样做不行了,才会换一个方向。大概步骤如下:
1. 判断当前状态是否为所要的状态,视情况进行处理或回退
2. 在当前状态上枚举所有合法的方向,去某一个未尝试过的方向,如果没有就退出
3. 沿该方向走一步,改变状态。(尝试)
4. 在新的状态上执行这个流程。(递归)
5. 撤销2中的改变(回溯)
6. 回到2
回溯也差不多就讲到这儿了