poj2342
一棵樹,每個節點有權值,兒子與父親不能同時取,求解從樹上選取點能獲得的最大權值
dp[i][0]表示不取,dp[i][1]表示取。
設j為i的兒子節點,dp[i][0] += max(dp[j][0], dp[j][1]), dp[i][1] += dp[j][0];
入度為零的點是根,從根開始進行深搜。
1 #include 2 #include 3 #include 4using
namespace
std;
5 typedef long
long
ll;6
7const
int maxn = 6e3 + 10;8
intn;
9int dp[maxn][2
];10
bool
in[maxn];
11 vectortr[maxn];
1213
void dfs(int
u) 20}21
22int
main()
34for (int i = 1; i <= n; i++) if (in[i] == 0
) 35 root =i;
36dfs(root);
37 printf("
%d\n
", max(dp[root][0], dp[root][1
]));38}
39return0;
40 }
樹形DP入門
hdu1011 一棵樹,有n個結點,每個結點有v個bug,有w的brain。我從1號結點開始走,帶著m個戰士。1個戰士可以消滅20個bugs,如果我把某個結點的所有bug都消滅了我就能得到那個結點的brain。如果想攻擊當前結點,那麼必須先攻擊了它的父結點 1號點除外 其中當你攻占了當前結點,你可以...
樹形dp 入門
以前看過點樹形dp,不過全忘了。今天做了一道入門級的簡單題,回憶了一下。所謂樹形dp就是在一棵樹上進行狀態轉移。有時候他的狀態轉移方程比普通dp還簡單,只不過建圖比較麻煩,順便複習了一下鄰接表的用法,真是好久不練就都忘了。下面是一道最基礎的題,要求父節點和兒子節點不能同時選,求最大權值,很明顯狀態轉...
樹形DP入門
先入門一下 題意 某公司要舉辦一次晚會,但是為了使得晚會的氣氛更加活躍,每個參加晚會的人都不希望在晚會中見到他的直接上司,現在已知每個人的活躍指數和上司關係 當然不可能存在環 求邀請哪些人 多少人 來能使得晚會的總活躍指數最大。思路 任何乙個點的取捨可以看作一種決策,那麼狀態就是在某個點取的時候或者...