狀態轉移方程也就顯而易見了:
f[u][i]=max(f[u][i],f[u][i-j-1]+f[v][j]+e[i].w)
( 1≤i≤min(q,sz[u]),0≤j≤min(sz[v],i−1) )
u表示當前節點,v是u的乙個子節點,sz[u]表示u的子樹上的邊數,q就是題目中要求的最多保留邊數
#include#include#include#include#include#define ll long long
#define gc getchar
#define maxn 105
using namespace std;
inline ll read()
while(isdigit(p))
return f?-a:a;
}int n,m,f[maxn][maxn];
struct ahahae[maxn<<1];int tot,head[maxn];
inline void add(int u,int v,int w);head[u]=tot++;
}int sz[maxn];
void dfs(int u,int fa)
}int main(){memset(head,-1,sizeof head);
n=read();m=read();
for(int i=1;i結束
P2015 二叉蘋果樹(樹形dp)
題目傳送門 description 有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 2 5 34 1現在這顆樹枝條太多...
樹形dp入門 P2015 二叉蘋果樹
題目描述 有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 2 5 3 4 1現在這顆樹枝條太多了,需要剪枝。但是一些樹...
洛谷P2015 蘋果二叉樹(樹形dp)
給出乙個n個點的二叉樹,樹上有邊權,求留下q個樹枝能夠獲得的最大收益為多少。dp i j d p i j 表示在以 i i 為根的節點,留下 j role presentation j j個分支,的最大收益值。設u u 為當前遍歷到的根節點,v role presentation v v為訪問的子節...