ZJOI2006 三色二叉樹 (樹形dp)

2022-05-10 07:23:46 字數 1050 閱讀 6060

輸入格式

輸入檔名:tro.in

輸入檔案僅有一行,不超過500000個字元,表示乙個二叉樹序列。

輸出格式

輸出檔名:tro.out

輸出檔案也只有一行,包含兩個數,依次表示最多和最少有多少個點能夠被染成綠色。

輸入輸出樣例

輸入 #1

1122002010
輸出 #1

5 2

有人做不出好像是因為沒讀懂題?其實挺好懂的,把陣列下標定義為從1開始,每個字元對應的就是他的兒子數,建樹的過程就是dfs的過程。手動模擬一下就可以畫出樹了。

後面就很簡單了,倒著遞推,(應該沒人會想不到這是個dp吧……)我感覺和美元匯率那道題有點像,只不過那個不是樹就簡單很多。

(分別是題目和樣例的圖示↓)

#includeusing

namespace

std;

const

int n = 500100

;char

s[n];

int son[n][2],dp[n][2],tot,len = 1

;void dfs(int

x)

if(s[x] == '2'

) }intmain()

int maxn = max(dp[1][1],dp[1][0

]);

cout

<< maxn << "

";

for(int i = n ; i > 0; i--)

int minn = min(dp[1][1],dp[1][0

]);

cout

<< minn << "";

return0;

}

ZJOI 2006 三色二叉樹

顯然是樹形dp,可以在狀態轉移的過程中順便把樹給建出來,定義 f i j f i j 為當節點 i i 被染成顏色 j role presentation style position relative j j時,以 i i 為根的子樹中最多有多少個節點被染成綠色,g i j role presen...

bzoj1864 Zjoi2006 三色二叉樹

傳送門 大力建出樹後大力dp 設f i j 表示以i為根節點,根節點顏色為j是的最優解。每次列舉當前結點節點顏色和兒子顏色,時間複雜度o n 27 uses math var a,b array 0.500005,1.3 of longint c array 0.500005 of longint ...

BZOJ1864 Zjoi2006 三色二叉樹

標籤 樹形dp description input 僅有一行,不超過500000個字元,表示乙個二叉樹序列。output 輸出檔案也只有一行,包含兩個數,依次表示最多和最少有多少個點能夠被染成綠色。sample input 1122002010 sample output 5 2題意 給定一棵二叉樹...