有一棵蘋果樹,如果樹枝有分叉,一定是分2叉(就是說沒有只有1個兒子的結點)
這棵樹共有n個結點(葉子點或者樹枝分叉點),編號為1-n,樹根編號一定是1。
我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹
2 5\ /
3 4\ /
1現在這顆樹枝條太多了,需要剪枝。但是一些樹枝上長有蘋果。
給定需要保留的樹枝數量,求出最多能留住多少蘋果。
第1行2個數,n和q(1<=q<= n,1乙個數,最多能留住的蘋果的數量。
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn =
210;
struct edgee[maxn*10]
;int head[maxn]
,tot,n,m,f[maxn]
[maxn]
,num[maxn]
,val[maxn]
;void
add_edge
(int u,
int v,
int w)
voiddp(
int u,
int fa)
}void
dfs(
int u,
int fa)
return;}
intmain()
dfs(1,
0);dp
(1,0
);printf
("%d\n"
,f[1
][m+1]
);return0;
}
二 蘋果樹 樹型動態規劃
題目大意 對於乙個二叉樹,除根節點外,每個節點都有相應的乙個權值。在此基礎上,求保留多少個點使得其仍然滿足樹的性質且權值總和最大。分析 先建樹。ch v,1 ch v,2 分別存v節點的左右孩子。dp v,l 存以v為根的樹保留l個節點的最大權和。num v 為點v的權值。dp v,l max 0 ...
二叉蘋果樹 樹型DP 揹包
二叉蘋果樹 有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 2 5 3 4 現在這顆樹枝條太多了,需要剪枝。但是一些樹...
二叉蘋果樹 二叉樹樹型DP
傳送門 中文題面 有一棵蘋果樹,如果樹枝有分叉,一定是分 2 叉 就是說沒有只有 1 個兒子的結點,這棵樹共有n 個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有 4 個樹枝的樹 2 5 3 4 1 現在這顆樹枝條太多...