奇奇怪怪的樹形dp

2021-07-11 16:18:43 字數 631 閱讀 3684

條件

1.整個圖是乙個樹狀的結構或者可以轉化為樹狀的結構。

2.對於每個根節點的狀態,跟且僅跟所屬的孩子(大多為2個)有牽連關係。也就是說,父親對孩子沒有影響。

3.狀態可以簡單的表示

4.有重疊子問題(可以沒有,不過那樣應用dp就沒有意義了)

將樹轉換為二叉樹

樹中每個結點最多只有乙個最左邊的孩子(長子)和乙個右鄰的兄弟。按照這種關係很自然地就能將樹轉換成相應的二叉樹。將一般樹轉化為二叉樹的思路,主要根據樹的孩子 -兄弟儲存方式而來,步驟是:

(1) 加線:在各兄弟結點之間用虛線相鏈。可理解為每個結點的兄弟指標指向它的乙個兄弟。

(2) 抹線:對每個結點僅保留它與其最左乙個孩子的連線,抹去該結點與其它孩子之間的連線。可理解為每個結點僅有乙個孩子指標,讓它指向自己的長子。

(3) 旋**把虛線改為實線從水平方向向下旋轉 45 ℃ ,成右斜下方向。原樹中實線成左斜下方向。這樣就樹的形狀成呈現出一棵二叉樹。

將森林轉換為二叉樹

(1)將森林中每棵子樹轉換成相應的二叉樹。形成有若干二叉樹的森林。

(2)按森林圖形中樹的先後次序,依次將後邊一棵二叉樹作為前邊一棵二叉樹根結點的右子樹,這樣整個森林就生成了一棵二叉樹,實際上第一棵樹的根結點便是生成後的二叉樹的根結點。

奇奇怪怪書

main a,b 據說根據c99標準 main 隨便寫什麼都可以的樣子 gcc警告然後還是可以編譯int a b main 還是可以編譯就是 各種警告float a,b main 這個很好玩的樣子 退出for迴圈條件是 scanf f a 為假 不是很清楚,等下再研究scanf返回值 大概就是如果s...

那些奇奇怪怪的寫法

template class t class test template class t void func t a,int len 關鍵字template意味著我們要定義乙個模板,那定義模板肯定要有泛指型別,那麼泛指型別在 呢,t就是我們要的泛指型別,那為什麼t前面是關鍵字class而不是關鍵字t...

奇奇怪怪的知識 GMV

gmv gmv gross merchandise volume 在電商 定義裡面是 成交金額,這個實際指的是拍下訂單金額,包含付款和未付款的部分 gmv 1銷售額 2取消訂單金額 3拒收訂單金額 4退貨訂單金額 一般取消訂單與拒收訂單的分界點在訂單是否已經從庫房生產完畢,庫房還沒生產的訂單客戶取消...