樹型dp,就是在樹上進行的dp。由於樹固有的遞迴性質,樹型dp一般都是遞迴進行的。
通過兩個經典例題感受一下。
例1:「沒有上司的舞會」問題
公司共有n(n≤6000)位員工。公司要舉行乙個舞會。 為了讓到會的每個人不受他的直接上司約束而能玩得開心,公司領 導決定:定義狀態:如果邀請了某個人,那麼一定不會再邀請他的直接的上司,但 該人的上司的上司,上司的上司的上司……都可以邀請。
已知每個人最多有唯一的乙個上司。(該模型就是乙個樹型模型)
公司的每個人參加晚會都能為晚會增添一些氣氛,求乙個邀請方案, 使氣氛值的和最大。
• 定義 f[i][0/1] 表示以 i 為根節點的子樹所能得到的最大的氣氛值。
• f[i][0] 表示以 i 為子樹且未選擇 i 號節點;
• f[i][1] 表示以 i 為子樹且選擇了 i 號節點
• 最終答案就是 max(f[root][0], f[root][1])
狀態轉移過程:
• 上司不參加,下屬可以參加,也可以不參加。 • 上司參加,下屬只能不參加。
• 列舉量x為當前節點i到能直接到達的所有的子節點。
**:使用了鏈式前向星建樹。
#include
#include
#include
#define inf 99999999
using
namespace std;
int n,m;
int w[
6010
],d[
6010
],head[
6010
],f[
6010][
5];struct edgee[
6010];
int cnt;
void
add(
int u,
int v,
int w)
void
solve
(int u)
for(
int i=head[u]
;i;i=e[i]
.next )
f[u][1
]+=w[u];}
intmain()
int root;
for(
int i=
1;i<=n;i++)if
(d[i]==0
)solve
(root)
;int ans=
-inf;
ans=
max(f[root][0
],f[root][1
]);printf
("%d\n"
,ans);}
return0;
}
例2:
有一棵樹(n≤1e5),樹上每個節點都是一座房子,房子裡有人, 樹的每條邊都有乙個權值(距離),所有人都要去別人家玩(通過單獨考慮每一條邊。 • 利用樹的性質,我們可以得知,一條邊將一棵樹劃分為兩個部分。 • 假定這條邊的權值為w,兩側兩個部分的節點個數分別為m1和m2。 • 每一條邊最多經過多少次? • 假設一邊比另一邊少,那麼就讓這些節點全部到另一邊去,這樣的 答案一定是最優的。最短路徑), 有兩個要求: • 1. 所有人都要去別人的房子(不能不動) • 2. 不能同時有兩個人去同乙個房子 • 求這些人移動距離總和的最大值 。
41 2 3
2 3 2
4 3 2
ans=18
怎樣獲取對於每個邊而言的m1和m2?
• 假定這個樹是一棵有根樹。 • 有根樹的每條邊一定是父親->兒子的關係。 • 對於這條邊,m1為以兒子為根的子樹的節點數量。 • (m2 = n - m1) • m1在遞迴的過程中不斷計算即可。
本題是hdu-4118。因為遞迴棧不夠大,需要手動增大。
**:
#pragma comment(linker,"/stack:102400000,102400000")
#include
#include
#include
using
namespace std;
int t,n;
long
long ans;
int vis[
100010
],head[
100010];
intmin
(int a,
int b)
struct edgee[
200010];
int cnt;
void
add(
int u,
int v,
int w)
intdfs
(int u)
}return tmp;
}int
main()
dfs(1)
;printf
("case #%d: %lld\n"
,t,ans);}
return0;
}
樹型DP入門
題意 某公司要舉辦一次晚會,但是為了使得晚會的氣氛更加活躍,每個參加晚會的人都不希望在晚會中見到他的直接上司,現在已知每個人的活躍指數和上司關係 當然不可能存在環 求邀請哪些人 多少人 來能使得晚會的總活躍指數最大。思路 任何乙個點的取捨可以看作一種決策,那麼狀態就是在某個點取的時候或者不取的時候,...
樹型DP 選課
大學裡實行學分。每門課程都有一定的學分,學生只要選修了這門課並考核通過就能獲得相應的學分。學生最後的學分是他選修的各門課的學分的總和。每個學生都要選擇規定數量的課程。其中有些課程可以直接選修,有些課程需要一定的基礎知識,必須在選了其它的一些課程的基礎上才能選修。例如,資料結構 必須在選修了 高階語言...
樹型DP 皇宮看守
太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀 有邊直接相連的宮殿可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。可是陸小鳳手上的經費不足,無論如何也沒法在每個宮殿都安置留守侍...