樹形DP 樹形DP四例

2021-10-10 06:07:52 字數 2655 閱讀 4720

是時候練一下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()

int in

const

int n=

1e5+5;

int n,q,val[n]

,f[500][

500]

;int tot,first[n]

,nxt[n<<1]

,aim[n<<1]

,wei[n<<1]

;int siz[n]

;void

ljb(

int u,

int v,

int w)

void

dfs(

int u,

int fa)

return;}

intmain()

dfs(1,

0);printf

("%d\n"

,f[1

][q]);

return0;

}

portkey

揹包型樹形dp

有一種方法「左兒子右兄弟」不推薦

分組揹包解決

#include

using

namespace std;

#define in read()

int in

const

int n=

3e3+5;

int n,m,son[n]

[n],num[n]

;int wei[n]

[n],val[n]

;int f[n]

[n],siz[n]

;int t[n]

;int

dfs(

int u)

int sum=0;

for(

int e=

1;e<=num[u]

;++e)

return sum;

}int

main()

}for

(int i=n-m+

1;i<=n;

++i)

val[i]

=in;

memset

(f,128

,sizeof f)

;for

(int i=

1;i<=n;

++i)

f[i][0

]=0;

dfs(1)

;for

(int i=m;i>0;

--i)

}return0;

}

portkey

菜題

#include

using

namespace std;

#define in read()

int in

const

int n=

1e5+5;

int n,a[n]

,sum[n]

,fa[n]

,dp[n]

,ans;

int tot,first[n]

,nxt[n<<1]

,aim[n<<1]

;void

ljb(

int u,

int v)

//void get_father(int u,int f)

// return;

//}void

dfs(

int u,

int f)

ans=

max(ans,dp[u]);

return;}

intmain()

// get_father(1,0);

dfs(1,

0);printf

("%d"

,ans)

;return0;

}

portkey

經典菜題

#include

using

namespace std;

#define in read()

int in

const

int n=

1e3+5;

int n,m,w[n]

,f[n]

[n],siz[n]

;vector<

int>g[n]

;void

dfs(

int u)

siz[u]

+=siz[v];}

return;}

intmain()

dfs(0)

; cout<[m]

}

剩下兩道題不想做了

HLOJ 樹形DP前置 DFS(樹形DP入門)

給定一棵 n nn 個點的樹,根為 t tt求每個點的父親是哪個點,t tt 的父親輸出 0 00第一行兩個整數 n,t n,tn,t接下來 n 1 n 1n 1 行,每行兩個整數 x,y x,yx,y,表示 x,y x,yx,y 之間有一條邊 n nn 行,第 i ii 行乙個整數,表示 i ii...

樹形dp小結

這些天做了一些樹形dp的題目,感覺有了些領悟,尤其是理解到樹形揹包就是分組揹包之後。選出幾道不錯的總結一下 hdu 1520 hdu 4003 poj 1155 poj 2486 hdu 4313 hdu 4340 hdu 1520 入門水題 每個節點有權值,子節點和父節點不能同時選,問最後能選的最...

樹形dp總結

from 列出一些經典問題吧 1 給出一棵樹 每個節點有權值 要求父節點和子節點不能同時取 求能夠取得的最大值 hdu1520 2 給出一棵樹,求離每個節點最遠的點的距離 hdu2196 3 1 在乙個地圖上,有n座城堡,每座城堡都有一定的寶物,在每次遊戲中允許攻克m個城堡並獲得裡面的寶物。但由於地...