動態規劃 P2585 ZJOI2006 三色二叉樹

2022-10-10 22:03:15 字數 2064 閱讀 2451

p2585[zjoi2006]三色二叉樹

題目傳送門:p2585 [zjoi2006]三色二叉樹 - 洛谷 | 電腦科學教育新生態 (luogu.com.cn)

題目:

思路分析:

可以借鑑動態規劃:p1352沒有上司的舞會 - 朱朱成 - (cnblogs.com),建立乙個二維的dp 第二維01代表有沒有去,有沒有染成綠色的。對於乙個結點來說,以這個結點為根的子樹,染成綠色的數目,因為是二叉樹,所以乙個結點只會連兩個結點,所以不染成綠色的就等於max(左子節點染成綠色,的左子樹綠色數目總和,右子節點不染成綠色,的右子樹綠色數目總和),因為不染成綠色,左右子節點必有乙個染成綠色,取最優就行,因為是三種顏色,所以不可能父節點不成綠色,兩個子節點也不是綠色,可以根據抽屜原理得知。然後其他的計算其實跟其他兩種顏色沒關係了,就考慮染不染成綠色。然後我們再計算這個點染成綠色,就等於左子節點不染成綠色,的左子樹綠色數目總和+右子節點不染成綠色,的右子樹綠色數目總和+1。注意+1,就是父節點剛染成綠色的1。然後利用dfs,按照這個思路樹形dp即可。因為題目是求最多和最少的,所以構建兩個dp陣列,max改成min即可。

關鍵dp**:

ac完整**:

1 #include 2 #include 3 #include 4 #include5

using

namespace

std;

6const

int maxn = 5 * 1e5 + 5;7

//設tree[i][0] 為第i個節點的左節點編號8//

設tree[i][1] 為第i個節點的右節點編號9//

dp[i][0]為第i個節點 為根 並且這個結點塗綠色 的子樹 綠色最多的數量

10//

dp[i][12]為第i個節點 為根 並且這個結點不塗綠色 的子樹 綠色最多的數量

11int dp1[maxn][2];//

乙個求max 乙個求min

12int dp2[maxn][2

];13

int tree[maxn][2

];14

intcnt;

15string

str;

16void dfs(int

root)

1726

else

if (str[root] == '2'

)2733}

3435

void dp_dfs1(int

x)36

41if (str[x] == '

0')//

如果是葉子

4246

else

4755}56

void dp_dfs2(int

x)57

62if (str[x] == '

0')//

如果是葉子

ZJOI2005 午餐 貪心,動態規劃

上午的訓練結束了,thu acm小組集體去吃午餐,他們一行n人來到了著名的十食堂。這裡有兩個打飯的視窗,每個視窗同一時刻只能給乙個人打飯。由於每個人的口味 以及胃口 不同,所以他們要吃的菜各有不同,打飯所要花費的時間是因人而異的。另外每個人吃飯的速度也不盡相同,所以吃飯花費的時間也是可能有所不同的。...

P2051(動態規劃)

這次小可可想解決的難題和中國象棋有關,在乙個n行m列的棋盤上,讓你放若干個炮 可以是0個 使得沒有乙個炮可以攻擊到另乙個炮,請問有多少種放置方法。大家肯定很清楚,在中國象棋中炮的行走方式是 乙個炮攻擊到另乙個炮,當且僅當它們在同一行或同一列中,且它們之間恰好 有乙個棋子。你也來和小可可一起鍛鍊一下思...

問題 P 動態規劃 收益

題目描述 建太空梯進入太空要1兆億?魔法學院的院長瞪大了眼睛。這只是基礎設施的費用,後期還要 墨老師掰著手指算。哎呀,現在地主也很窮啊,學院的錢批下來就這麼多,你想辦法用這筆錢在債券市場上獲得最大收益吧。院長皺著眉頭。簡單來說,就是你有一筆錢,你要將這筆錢去投資債券,現在有d種債券,每種債券都有乙個...