ssl1605 二 蘋果樹

2021-07-11 18:40:30 字數 708 閱讀 7118

description

有一棵蘋果樹,如果樹枝有分叉,一定是分2叉(就是說沒有只有1個兒子的結點) 

這棵樹共有n個結點(葉子點或者樹枝分叉點),編號為1-n,樹根編號一定是1。 

我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 

2 5 

\ / 

3 4 

\ / 

1 現在這顆樹枝條太多了,需要剪枝。但是一些樹枝上長有蘋果。 

給定需要保留的樹枝數量,求出最多能留住多少蘋果。 

input

第1行2個數,n和q(1<=q<= n,1

output

乙個數,最多能留住的蘋果的數量。 題解

首先轉化為一棵二叉樹。

這是題目的方程:

a(i,j):=max(a(i.left,k)+a(i.right,j-k)),0<=k<=j

a[i,j]表示連線i和j枝條上的權值。 **

f[i,j]:=zd(a[i,x]+f[x,j-1],f[i,j]);

f[i,j]:=zd(a[i,y]+f[y,j-1],f[i,j]);

for k:=0 to j-2 do

f[i,j]:=zd(f[x,k]+f[y,j-2-k]+a[i,x]+a[i,y],f[i,j]);

二叉蘋果樹

我們可以把保留邊轉換成保留點 因為我個人對保留點熟 跟據樹的性質,乙個點有0or1個根。所以我們可以把邊上的蘋果數轉移到子節點上。根據題意可知這應是一道dp題 廢話 設f i j 為以i為根的樹上保留j個節點的最大權值和,又因為這是個二叉樹,所以我們不妨設左子樹要保留的節點數為k,那麼右子樹的需要保...

二叉蘋果樹

有一棵二叉樹,每條樹枝上有乙個權值,求保留 q 個樹枝下能達到的最大權值。我們考慮 n 較小,先把邊轉化為點,我們可以用 f i j 表示以 i 為根的子樹中選 j 個節點的能達到的最大權值,那麼有三種情況 1 左子樹全部砍掉。2 右子樹全部砍掉。3 左子樹保留 k 個,右子樹保留 j k 個節點,...

題解 二叉蘋果樹

question 題目大意 邊權版本樹形 dp 求保留 q 條邊,使得其邊權和最大。當然,必須聯通。要不就不是 dp 了 那考慮設計 dp i j 表示第 i 個節點,選擇 j 條邊的最佳方案。寫出方程為 dp i j max dp i j k dp v k e i dis 列舉 k 表示邊數。這有...