玩具 奇妙樹形dp 計數

2022-05-20 02:52:33 字數 2657 閱讀 5017

求 nn

個結點的隨機生成森林的 期望最高樹高 .

設 f[i,

j,k]

f[i,

j,k]

表示高度為 i

i, 使用 j

j 個球, k

k 個球在頂部的概率,f[

i,j,

k]=f

[i,j

−1,k

]∗j−

3j−1

+f[i

,j−1

,k−1

]∗1j

−1+f

[i−1

,j−1

,p]∗

1j−1

f[i,

j,k]

=f[i

,j−1

,k]∗

j−1j

−3​+

f[i,

j−1,

k−1]

∗j−1

1​+f

[i−1

,j−1

,p]∗

j−11

​時間複雜度 o(n

4)o(

n4), 沒有 ded

e 出 bug

bug, 暴力保底 30pt

s30p

ts .題

意:題意

: 起初只有乙個根, 每次隨機乙個點加乙個兒子, 求出最後形成的 n

n 個節點的樹的期望高度 .這裡

沿用原題

解的幾個

定義↓這

裡沿用原

題解的幾

個定義↓

說實話剛開始我覺得很迷 .f[

i,j]

f[i,

j]很好轉移:f[

i,j]

=f[i

−1,j

−1]∗

j−1i

+f[i

−1,j

]∗i−

jif[

i,j]

=f[i

−1,j

−1]∗

ij−1

​+f[

i−1,

j]∗i

i−j​

然後是 g[i

,j]g

[i,j

] 的轉移:g[

i,j]

=∑k=

1if[

i,k]

∗f[k

,j]∗

g[i−

k,j]

g[i,

j]=k

=1∑i

​f[i

,k]∗

f[k,

j]∗g

[i−k,j]

意為在有 i−k

i−k 個點的森林基礎上生成一顆 j

j 個點的樹, 然後再取出其中滿足條件的樹 .

將若干深度不超過 j−1

j−1 的樹組成的森林 連上同乙個根, 組成乙個深度不超過 j

j 的樹, 即 f[i

,j]=

g[i−

1,j−

1]f[

i,j]

=g[i

−1,j

−1] .

#include

#define reg register

intread()

while

(isdigit

(c)) s = s*

10+ c-

'0', c =

getchar()

;return s * flag;

}typedef

long

long ll;

const

int maxn =

305;

int n;

int mod;

int inv[maxn]

;int f[maxn]

[maxn]

;int g[maxn]

[maxn]

;int f[maxn]

[maxn]

;int

main()

for(reg int i =

0; i <= n; i ++

) g[0]

[i]=1;

for(reg int i =

1; i <= n; i ++

)for

(reg int j =

0; j <= n; j ++

)int ans =0;

for(reg int i =

1; i < n; i ++

) ans =

(1ll

*ans +((

1ll*f[n]

[i]%mod - f[n]

[i-1

]%mod)

*i%mod)

)% mod;

ans =

(1ll

*ans%mod + mod)

% mod;

printf

("%d\n"

, ans)

;return0;

}

P3914 染色計數 樹形dp

n nn個點每個點有些可以染的顏色,要求相鄰顏色不相同,方案總數。樹形d pdp dp,定義fx,if fx,i 表示點x xx的染顏色i ii的方案數。然後定義zx i 1 mfxi z x sum mf zx i 1m fxi 然後顯然動態轉移方程fx,i zy fy,i x y f z y f...

C Garland (樹形DP 子樹計數問題)

又攻克一道樹形dp題,首先子樹計數問題,感覺都是先自下而上跑一遍dfs,然後根據題意然後抉擇得套路。一顆有根樹,分成三棵子樹,保證點權和相互相等。分析 子樹滿足ans 3,並且ans 3 0加入就可以了,滿足兩個點或者以上,就是行 為啥說2以上 這裡就是我得wa得點,可以所有得點值為0,你就知道了 ...

樹形DP 樹形DP四例

是時候練一下dp了!我的題單 portkey f u,if fu,i 表示以u uu為根節點的子樹中保留i ii條樹枝的最大蘋果數 f u,i max f max f fu,i max這些題是菜,但也不能輕視啊!include using namespace std define in read i...