2016 7 13 樹形動規

2021-07-24 07:51:03 字數 1943 閱讀 7557

rmq演算法講完沒幾個小時,我們就開始了小紫中的一節(足見這個演算法很重要)——樹形動歸;

1.焦作一中資訊學oy(

2.小黃(資訊學奧賽一本通)

3.小紫(演算法競賽入門經典第二版)

題型總結:(來自資料1

1、加分二叉樹:區間動規+樹的遍歷;

2、二叉蘋果樹:二叉樹上的動規;

3、最大利潤:多叉樹上的動規;

4、選課:多叉樹轉二叉;

5、選課(輸出方案):多叉轉二叉+記錄路徑;

6、軟體安裝:判斷環+縮點+多叉轉二叉;

學習目標:

1.熟練掌握樹形動規(小紫刷掉,資料一刷掉);

2.複習樹的相關知識;

(二叉樹的分支確定且可以為空,具有良好的遞迴特性,程式設計很方便,故常將多叉樹轉二叉樹(小黃))

一.加分二叉樹

題意:樹的結構動規(!=樹形動規,是根據樹的結構的動規)(n<30節點),(分數<100)

題目分析:分左右,要熟練遍歷順序;老師沒讓寫......**是資料一里的

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int ee=50,e=-999999999

;int

n;int a[ee]=,f[ee][ee],root[ee][ee]=;//

f(i,j)中序遍歷為i,i+1,…,j的二叉樹的最大加分

//**若根節點的下表是k,則左端點的是k-1,右端點是k+1;

void front(int x,int

y)int

main()

for(int i=1;i<=n;i++)

//區間長度

for(int len=1;len<=n;len++)

}f[i][j]=temp;}}

}cout

<1

][n];

//前序遍歷

cout

1,n);

fclose(stdin);fclose(stdout);

return0;

}

二.ural_1018 二叉蘋果樹

題意:每個邊(共n)帶權值,給定保留邊數目(q),算最大權值;1<=q<= n,1

題目分析:這裡用了乙個後來都會用到的思想,就是因為邊沒有點好記,所以可以把邊上的分數記在點上,並且給根節點加一條邊,這樣邊數加一以後就不需要分開討論了;其中createtree遞迴由上而下不太好理解,我寫錯了很多次;

#include#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

int n,f[105][105],vis[105],sta[105],fin[105],amo[105

],q;

struct

node

thran[

105];

void createtree(int

k)

else

}}void dp(intk)

else

} int

main()

訊息傳遞(樹形動規)

p2018 樹形動規 題目描述 巴蜀國的社會等級森嚴,除了國王之外,每個人均有且只有乙個直接上級,當然國王沒有上級。如果a是b的上級,b是c的上級,那麼a就是c的上級。絕對不會出現這樣的關係 a是b的上級,b也是a的上級。最開始的時刻是0,你要做的就是用1單位的時間把乙個訊息告訴某乙個人,讓他們自行...

codevs1378 選課 樹形動規

題目傳送門 這道題可以用多叉樹轉二叉樹的方法,左子樹為兒子,右子樹為同個父親的兄弟,這樣的話就可以很方便地寫出狀態轉移方程 f x v max f x v w x dp ch x 0 i dp ch x 1 v i 1 要注意的是,f x v 可能在之前已經計算過 比如f ch i 0 4 在f i...

Employment Planning 動規小練

employment planning 原題鏈結 對於當前月份所需人數,和僱傭最大所需人數之間的情況進行討論。由於解雇金額和僱傭金額的存在,會存在一次性僱傭更多的人以減少解雇金額的情況,所以要討論到所需最大人數。include include include include include incl...