其實就是這題的雙倍經驗啦。
動態轉移方程是
\[f[i][j]=max(f[i][j],f[i][i-k-1]+f[i_][k]+e[i].w)
\]這裡\(f[i][j]\)代表從以\(i\)為根的子樹中合法留\(j\)個樹枝的最大剩餘值。
#include#include#includeconst int maxn=105;
using namespace std;
typedef long long ll;
ll f[maxn][maxn],c;
int n,s,l,r,root,tot[maxn];
struct node
e[maxn<<1];
int head[maxn],cnt=0;
int deg[maxn];
void add(int u,int v,ll c)
int dfs(int cur,int fa)
} return tot[cur];
}int main()
{ scanf("%d%d",&n,&s);
for(int i=1;i好像這就是樹形揹包了呢。
Luogu P2015 二叉蘋果樹
題目描述 有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 現在這顆樹枝條太多了,需要剪枝。但是一些樹枝上長有蘋果。給定...
luogu P2015 二叉蘋果樹
有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 2 5 3 4 現在這顆樹枝條太多了,需要剪枝。但是一些樹枝上長有蘋果...
Luogu P2015 二叉蘋果樹
題目鏈結 樹上零一dp 記憶化搜尋 如果是空結點 如果是葉子結點直接返回蘋果數 以上都不滿足的話,dp狀態轉移 設定dp的轉移,轉移到左右兒子結點 for int i 1 i結果31分 1.說白了,記憶化搜尋還不是掌握的特別好 2.其次狀態設計不是特別好,在儲存左右兒子時,應該該需要儲存邊的 inc...