CCF第四题思考

当可以随意选择两个节点的时候它是贪心法(哈夫曼),当只能选相邻节点时,它变成了动态规划,

为什么只能选相邻节点呢,因为只要从左到右选叶结点,得到的就是字典序,而我之前的想法是,先构造出哈夫曼树,再把叶结点代表的编码从左到右赋给ABCDE,但是哈夫曼树可以有很多颗,哪一颗才是字典序最小的呢,这就很难。为何不换种思考,先把叶结点从左到右赋给ABCDE,再每次取相邻节点来构造树,这样就不会破坏ABCDE的顺序,能保证ABCDE对应的叶结点始终是从左到右排列的,动态规划就是遍历+分治+递归

 

铁路修建题:

其实可以理解为,从1到n这条路径中的最大路段与其他方案比要最小,因为这条路径何时完工取决于耗时最长的那段,木桶理论,可以用贪心法,就是半截子的最小生成树,kruskal,原本的最小生成树的终止条件是所有点都连通(都在一个并查集中),

而这里只需要1和n连通即可,所以每次取最短的边,直到1和n在同一个并查集中,这就是贪心。

 

201604-4 游戏:

我当时考虑的是从当前点,分别走上下左右四个方向然后递归,但没想到这样其实是dfs,递归访问就是dfs,dfs就是递归,而要考虑最短的话,其实就是要树层次最小,就是要层序遍历,其实就是bfs,不然用dfs层数可能会无限大,而bfs只要已找到就立即return,这样找到的绝对就是层数最小的,而bfs是递推,用了递归就不是bfs了,

 

 

相关文章: