hdu1520 數形dp入門

2021-08-14 22:14:57 字數 696 閱讀 3623

題意:在乙個有根樹上每個節點有乙個權值,每相鄰的父親和孩子只能選擇乙個,問怎麼選擇總權值之和最大。

思路: 

樹形dp的常規入門題:設dp[i][0]表示:當前這個點不選,dp[i][1]表示當前這個點選擇的最優解。

轉移方程:dp[cur][0]+=max(dp[son][1],dp[son][0]);//當前這個點不選,那他的孩子可選可不選,取 

最大的。 

dp[cur][1]+=dp[son][0]//當前這點選擇,那他的孩子就不能選擇。

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

const int n = 6010;

int dp[n][2];

vector e[n];

void dfs(int t)

}int main()

memset(dp,0,sizeof(dp));

int l,k;

while(scanf("%d%d",&l,&k) && (l+k))

int t = 1;

while(f[t]!= -1) t = f[t];

dfs(t);

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

}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 當前這個點不選,那他的...