poj 1463樹形dp入門

2021-10-01 07:18:29 字數 728 閱讀 3170

一道簡單的樹形dp

動態轉移方程:dp[root][1]+=min(dp[id][1],dp[id][0])dp[root][0]+=dp[root][1]若根節點放哨兵,則它的孩子節點有兩種選擇,若不放,呢麼他的孩子節點只有一種選擇

ac**:

#include

#include

#include

#include

using namespace std;

const int maxn=

2e3+5;

vector<

int>vec[maxn]

;int dp[maxn][2

];//兩種狀態

int vis[maxn]

;//判斷根節點

int n;

void dfs(

int root)

}int main()}

int root;

for(

int i=

0;i} dfs(root)

; printf(

"%d\n"

,min

(dp[root][0

],dp[root][1

]));

}}

POJ 1463 解題報告

這道題是dp。之前應該做過類似的題,對每個節點根據子節點的情況進行dp,但是忘了,看了解題報告才知道這個思路。要點在於因為本題是樹形結構,我們可以從根節點開始從上到下dp。對每個節點,有兩種可能,cover or not 如果cover了,那麼和這個節點相連的邊都覆蓋到了,所以子節點可以cover也...

poj2342 樹形dp入門

題意 公司要舉辦一次晚會,但是為了使得晚會的氣氛更加活躍,每個參加晚會的人都不希望在晚會中見到他的直接上司 現在已知每個人的活躍指數和上司關係,求邀請哪些人來能使得晚會的總活躍指數最大。分析 毫無疑問肯定需要先建樹,然後就是從這棵樹裡面選擇一些點,當然不能暴力。我們用dp i 0 表示不選擇第i棵樹...

POJ 2342 (樹形dp入門)

樹形dp,現在才開始看,先敲個水題入個門吧,這個題很簡單,知道樹dp的概念大概就能做出來 我們用dp root 2 代表當前節點這個人是否參加當前聚會的方法數,dp i 0 代表不參加加,dp i 1 代表參加,那麼dp i 0 max dp j 0 dp j 1 dp i 1 dp j 0 其中j...