Hdu 1520 DP 樹形DP 入門訓練

2021-07-04 08:19:38 字數 902 閱讀 2730

題目大意:給定一棵關係樹,每個節點有個權值,子節點和父節點不能同時選,問最後能選的最大價值是多少?

解題思路:樹形dp入門題。由於子節點與父節點不能同時選,有人可能會用貪心思想,二者選其一肯定最優。其實不然,有可能父節點和子節點都不選,而要選子孫節點。不過只要再往深點想下,就可以得出動態規劃的解法。每個節點要麼選要麼不選,和大多數選不選動歸一樣,來個dp[i][2],0表示不選,1表示不選,那我們只要從葉子節點往根結點不斷更新dp[i][0]和dp[i][1]就可以了。

狀態轉移方程:dp[i[[1] = sum(dp[j][0])    + 當前節點                  (當前選了,子節點必定不能選,最優的情況是都不選,然後累加)

dp[i][0] = sum(max(dp[i][0],dp[i][1]))   (當選不選,子節點可選可不選,找大的那個狀態)

測試資料:

110 0711

1111

11 3

2 36 4

7 44 5

3 50 0

#include #include #define max 20000

#define max(a,b) (a)>(b)?(a):(b)

struct node *head[max],tree[max];

int n,ptr,dp[max][2];

int vis[max],num[max];

void initial()

void addedge(int x,int y)

void tree_dp(int v)

p = p->next;

}dp[v][1] += num[v];

}int main()

return 0;

}

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入門

題目鏈結 題意 要開派對,邀請了上司就不能邀請他的下屬,邀請了下屬就不能邀請他的上司,每個人有乙個值,求邀請的人的總值最大 第一行給出乙個數n,代表有n個人。下面n行分別給出n個人的的值 再下面n行每行給出l,k k是l的上司 以0 0結束一組輸入 樹形dp 把每個人看成乙個點,則該點有兩個狀態 邀...

HDU1520(樹形dp入門題)

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