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...