動態規劃 三色二叉樹

2021-09-11 02:48:14 字數 1310 閱讀 4767

三色二叉樹

time limit:1s

memory limit:32m

accepted submit:81

total submit:211

一棵二叉樹可以按照如下規則表示成乙個由0、1、2組成的字串行,我們稱之為「二叉樹序列s」:

例如,下圖所表示的二叉樹可以用二叉樹序列s=21200110來表示。

你的任務是要對一棵二叉樹的節點進行染色。每個節點可以被染成紅色、綠色或藍色。並且,乙個節點與其子節點的顏色必須不同,如果該節點有兩個子節點,那麼這兩個子節點的顏色也必須不相同。給定一棵二叉樹的二叉樹序列,請求出這棵樹中最多和最少有多少個點能夠被染成綠色。

輸入輸出格式

輸入資料由多組資料組成。

每組資料僅有一行,不超過10000個字元,表示乙個二叉樹序列。

對於每組輸入資料,輸出僅一行包含兩個整數,依次表示最多和最少有多少個點能夠被染成綠色。

樣例輸入

1122002010

樣例輸出

5 2
#include #include #include #include #define top_num 2

#define min_top 0

#define max_top 1

#define is_green 0

#define no_green 1

#define max_num(x, y) ((x) > (y) ? (x) : (y))

#define min_num(x, y) ((x) < (y) ? (x) : (y))

int main()

}--top[min_top];

isa = stack[min_top][is_green][top[min_top]];

noa = stack[min_top][no_green][top[min_top]];

min_num = min_num(isa, noa);

--top[max_top];

isa = stack[max_top][is_green][top[max_top]];

noa = stack[max_top][no_green][top[max_top]];

max_num = max_num(isa, noa);

printf("%d %d\n", max_num, min_num);

}return 0;

}

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 三色二叉樹

僅有一行,不超過500000個字元,表示乙個二叉樹序列。輸出檔案也只有一行,包含兩個數,依次表示最多和最少有多少個點能夠被染成綠色。1122002010 5 2樹形dp int mx n 3 3 點i的顏色為0 1 2,點i為根的子樹最多有多少個0 1 2 int mn n 3 3 點i的顏色為0 ...

BZOJ 1864 三色二叉樹 樹DP

僅有一行,不超過500000個字元,表示乙個二叉樹序列。輸出檔案也只有一行,包含兩個數,依次表示最多和最少有多少個點能夠被染成綠色。1122002010 5 2dp i 0 i節點不為綠色獲得的最大收益 dp i 1 i節點為綠色獲得的最大收益 include include include inc...