樹形dp總結

2021-07-17 02:33:30 字數 750 閱讀 8610

這個月一直搞dp了,狀壓,數字,樹形,感覺雖然有時訓練很辛苦,但真的很充實。

這個星期看了一些樹形dp的資料。

樹形dp簡單來說就是在樹上的dp,這裡的很多題,都和揹包有聯絡,從乙個根節點開始,分配方案給它的子樹。

有乙個很有意思的題。沒有上司的聚會(hdu 1520)。

大致題意就是說,要舉辦乙個聚會,每個人都有乙個權值,然後所有人都不希望碰到自己的直系上司。顯然沒有成環的現象。

那麼這些人的關係就可以組成乙個樹。典型的樹形dp。

乙個人無非2個狀態,來或者不來。

那麼我們就可以建乙個dp[i][j],代表第i個來或者不來的最大權值。j=0不來,j=1來。

在用dfs搜尋一遍就好了。

下面附上**。

#include

using

namespace

std;

int val[6005],dp[6005][3];

int n;

bool vis[6005];

vector

v[6005];

void dfs(int a)

}int main()

int a,b;

while(scanf("%d%d",&a,&b) && a+b)

dfs(1);

printf("%d\n",max(dp[1][0],dp[1][1]));

}return

0;}

樹形dp總結

from 列出一些經典問題吧 1 給出一棵樹 每個節點有權值 要求父節點和子節點不能同時取 求能夠取得的最大值 hdu1520 2 給出一棵樹,求離每個節點最遠的點的距離 hdu2196 3 1 在乙個地圖上,有n座城堡,每座城堡都有一定的寶物,在每次遊戲中允許攻克m個城堡並獲得裡面的寶物。但由於地...

樹形DP總結

換根 fat結點更新u結點子結點 dp fat ans fat max dp u 0 老方法 更新根節點 ans u dp u max dp fat 0 第一次dfs 回溯時處理子結點為u向下的簡單路徑第一大和第二大 第二次dfs 遞迴處理子結點為u向上的簡單路徑最大 const int n 5e5...

樹形DP簡單總結

樹的特徵 1.n個點 只有n 1條邊的無向圖 2.無向圖里 任意兩點有且只有一條路 3.乙個點只有乙個前驅 但可以有多個後繼 4.無向圖沒有環 樹形dp 由於樹有著天然的遞迴結構 父子結構 而且它作為一種特殊的圖 可以描述許多複雜的資訊 因此在樹就成了一種很適合dp的框架 問題 給你一棵樹 要求用最...