hdu1520樹形dp入門

2022-07-17 08:45:08 字數 1003 閱讀 9334

題目鏈結

題意:要開派對,邀請了上司就不能邀請他的下屬,邀請了下屬就不能邀請他的上司,每個人有乙個值,求邀請的人的總值最大

第一行給出乙個數n,代表有n個人。

下面n行分別給出n個人的的值

再下面n行每行給出l,k;k是l的上司

以0 0結束一組輸入

樹形dp:把每個人看成乙個點,則該點有兩個狀態:邀請或沒被邀請

定義f[u][0]為節點沒被邀請時的值;f[u][1]為節點被邀請時的值

狀態轉移方程:

f[u][0]=sum(max(f[v][0],f[v][1])//v為u的下屬

f[u][1]=sum(f[v][0])//上司邀請了,則下屬只有沒被邀請這種狀態

要求總值,則顯然要求max(f[u][0],f[u][1])//u為根節點

用dfs遍歷樹用

f[u][0]=0;

f[u][1]=value[u];

vis[u]=1;

在遞迴中初始化每個節點的狀態

達到實現動態規劃的目的

**實現:

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8 vectorvec[6005];//

儲存節點的子節點

9int value[6005

];10

int vis[6005

];11

int f[6005][2

];12

intin[6005];//

入度找根節點:根節點入度為0

13void dfs(int

u)14

26return;27

}28intmain()

2941

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

4251}52

}53return0;

54 }

HDU1520 樹形dp入門)

解題思路 設dp i 0 表示 當前這個點不選,dp i 1 表示當前這個點選擇的最優解。轉移方程 dp cur 0 max dp son 1 dp son 0 當前這個點不選,那他的孩子可選可不選,取 最大的。dp cur 1 dp son 0 當前這點選擇,那他的孩子就不能選擇。include ...

HDU1520(樹形dp入門題)

題意 在乙個有根樹上每個節點有乙個權值,每相鄰的父親和孩子只能選擇乙個,問怎麼選擇總權值之和最大。思路 樹形dp的常規入門題 設dp i 0 表示 當前這個點不選,dp i 1 表示當前這個點選擇的最優解。轉移方程 dp cur 0 max dp son 1 dp son 0 當前這個點不選,那他的...

HDU 1520 簡單樹形dp

題意 乙個大學要舉行職工party。為使party中每個人都玩的開心,直接上司和下屬關係的員工不能同時參加。每個人都有各自的歡樂值。問如何邀請使得總歡樂值最大。dp i 1 表示選擇i點 dp i 0 表示不選擇i點 include include include include using nam...