2016蓝桥杯java_2016蓝桥杯Java A组

蓝桥杯算法

掌握回溯,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来储存运算结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值