#include#include#include#include#include#include#define maxn 200
#define inf 0xfffffff
using namespace std;
int dp[maxn][maxn];//dp[i][j]表示以i為根取j條樹枝的最大值
//1.只有乙個子樹
//dp[i][j]=max(dp[child][j-1]+val[i][child]);
//2.有兩個子樹
//dp[i][j]=max(dp[child1][k]+dp[child2][j-k-2]) 0<=k<=j-2;
//這裡採用記憶化搜尋,記錄所有可能的狀態,因為點還是比較少的。
//一般的樹形dp是先求出子樹的狀態,再根據子樹的狀態去得出根的狀態,這有明顯的層次結構的。
int n,m;
vectorg[maxn];//因為要判斷每棵樹的子樹個數,所以用vector比較好用
int map[maxn][maxn],vis[maxn];
void init()
memset(vis,0,sizeof(vis));
memset(dp,0,sizeof(dp));
memset(map,0,sizeof(dp));
}int dfs(int u,int q,int f)
if(dp[u][q]!=0) return dp[u][q];
//cout<>n>>m)
dfs(1,m,-1);
cout<}
return 0;
}
二叉蘋果樹 樹形DP
題意 description 有一棵蘋果樹,如果樹枝有分叉,一定是分2叉 就是說沒有只有1個兒子的結點 這棵樹共有n個結點 葉子點或者樹枝分叉點 編號為1 n,樹根編號一定是1。我們用一根樹枝兩端連線的結點的編號來描述一根樹枝的位置。下面是一顆有4個樹枝的樹 2 5 3 4 1 現在這顆樹枝條太多了...
樹形DP 二叉蘋果樹
有一棵二叉蘋果樹,如果樹枝有分叉,一定是分兩叉,即沒有只有乙個兒子的節點。這棵樹共 n 個節點,編號為 1 至 n,樹根編號一定為 1。我們用一根樹枝兩端連線的節點編號描述一根樹枝的位置。一棵蘋果樹的樹枝太多了,需要剪枝。但是一些樹枝上長有蘋果,給定需要保留的樹枝數量,求最多能留住多少蘋果。這裡的保...
二叉蘋果樹(樹形DP)
原題 顯然我們考慮這道題目可以很蠢的寫乙個dp對吧。考慮 dp i,j 表示以i為根,保留j個節點的最大蘋果數。然後就可以樹形dp的寫了。include include include include include include include define ll long long defin...