蓝桥杯算法
掌握回溯,dfs思想
总结:
首先我们需要读懂题意,设计算法
如果是需要排列出所有情况的我们可以考虑DFS或者回溯法
而需要求最优解(次优)的我们可以用:贪心,动态规划,BFS
关于DFS
DFS是从一个点开始,一条路走到黑的,寻找解的存在,不考虑解的优劣,一般会遍历所有的情况。(个人见解:在看这个之前还是得了解回溯和动态规划的思想,然后在对无向图(有向还没看)有了解)
我们需要
标记哪些点是已经遍历过的,哪些点是未遍历的
dfs结束的条件。
从一个点V0开始,先从此点周围的某点V1开始,开始搜寻...假设我们找到了解,我们需要一层一层回溯(递归)地告诉DFS我们找到的解,最终输出解的情况,如果这条路径无解,在下一条路径开始前将节点回溯,还原回未访问的状态,开始下次搜寻,下次搜寻退回一个点开始,如果无支路,再退回......
如果遍历完全部无解,return false.
题目1:
堆放煤球的问题,总结出数学的公式发现f(n) = f(n-1)+n其中n为行数,发现用递归求解,然后再将f(for(i : 100))
题目2:
生日Party,首先我们总结出公式,设x为岁数,i为过的年数,将公式作为条件进行判定,然后用暴力求解的方法解出x, 其中一个很好的思想就是利用倒序求和,这样减少时间复杂度
题目3:
搭积木,DFS
方法1:满足总条件,时间较长
方法二:分n==2,n==5,n==9三种情况判定,速度较快
题目4:
运动员分组(填空题),排列组合思想,给每个字母设置标记,如果标记过的字母就不再取出
题目5:
星球派人(填空),也是DFS,注意别自己加无关的IF,导致即使理解了但是还是不能正确求解
题目6:
寒假作业,依旧是DFS遍历所有情况,类似题目三,搭积木
题目7:
剪纸,DFS,注意设置中间temp来储存运算结果