HDU 1520 簡單樹形dp

2021-06-18 19:40:29 字數 621 閱讀 7178

題意: 乙個大學要舉行職工party。為使party中每個人都玩的開心,直接上司和下屬關係的員工不能同時參加。每個人都有各自的歡樂值。

問如何邀請使得總歡樂值最大。

dp[i][1] 表示選擇i點 dp[i][0]表示不選擇i點

#include #include #include #include using namespace std;

const int maxn = 6005;

int n;

int w[maxn],dp[maxn][2];

bool vis[maxn];

vectortree[maxn];

int max( int a,int b )

void dfs( int u ) }}

void init()

}int main()

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

dfs(1); //由於建的是無向圖,可以任意找個點當樹根進行dp 但是在搜尋中要判重,加個vis陣列

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

} 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 把每個人看成乙個點,則該點有兩個狀態 邀...

hdu 1520 樹形DP基礎

父節點和子節點不能同時選。首先是建樹,這個在之前的樹形揹包裡有講 因為這裡沒有指定根節點,所以可以建雙向邊,這樣就可以從任乙個點出發遍歷 接下來是dp,狀態轉移方程 dp fa 0 max dp son 0 dp son 1 dp fa 1 dp son 0 include include incl...