1. 程式人生 > >CCF第四題思考

CCF第四題思考

當可以隨意選擇兩個節點的時候它是貪心法(哈夫曼),當只能選相鄰節點時,它變成了動態規劃,

為什麼只能選相鄰節點呢,因為只要從左到右選葉結點,得到的就是字典序,而我之前的想法是,先構造出哈夫曼樹,再把葉結點代表的編碼從左到右賦給ABCDE,但是哈夫曼樹可以有很多顆,哪一顆才是字典序最小的呢,這就很難。為何不換種思考,先把葉結點從左到右賦給ABCDE,再每次取相鄰節點來構造樹,這樣就不會破壞ABCDE的順序,能保證ABCDE對應的葉結點始終是從左到右排列的,動態規劃就是遍歷+分治+遞迴

 

鐵路修建題:

其實可以理解為,從1到n這條路徑中的最大路段與其他方案比要最小,因為這條路徑何時完工取決於耗時最長的那段,木桶理論,可以用貪心法,就是半截子的最小生成樹,kruskal,原本的最小生成樹的終止條件是所有點都連通(都在一個並查集中),

而這裡只需要1和n連通即可,所以每次取最短的邊,直到1和n在同一個並查集中,這就是貪心。