REVIEW 樹形dp彙總(持續更新)

2021-07-24 03:27:49 字數 1961 閱讀 5294

本蒟蒻樹形dp太爛…所以刷刷以前的題加深印象

洛谷 p2014 選課

樹形dp+分組揹包+虛根

#include

#include

#include

#include

#include

#define ll long long

#define m(a) memset(a,0,sizeof a)

#define fo(i,j,k) for(i=j;i<=k;i++)

using

namespace

std;

vector

f[305];

int n,m,sco[305];

int dp[305][305];

inline

void dfs(int u)

}int main()

dfs(0);

printf("%d\n",dp[0][m]);

return

0;}

洛谷 p1273 有線電視網

樹形dp【傳送門】

【**】

#include

#include

#include

#include

#include

#define ll long long

#define m(a) memset(a,0,sizeof a)

#define fo(i,j,k) for(i=j;i<=k;i++)

using

namespace

std;

vector

f[3005];

int n,m;

int cost[3005],mon[3005],dp[3005][3005],num[3005];

inline

void dfs(int u)

}int main()

}fo(i,n-m+1,n) scanf("%d",&mon[i]);

fo(i,1,n) fo(j,1,n) dp[i][j]=-10000;

fo(i,n-m+1,n) dp[i][1]=mon[i],num[i]=1;

dfs(1);

fo(i,1,n) if(dp[1][i]>=0) ans=i;

printf("%d\n",ans);

return

0;}

洛谷 p1272 重建道路

為大家介紹這道神題…真的需要腦子轉一些彎…

我做了一遍第二遍又不會了…哭 【題解傳送門】

(題解是我看別人記錄後寫的…)

【**】

//洛谷 p1272 重建道路 

#include

#include

#include

#include

#include

#define ll long long

#define m(a) memset(a,0,sizeof a)

#define fo(i,j,k) for(i=j;i<=k;i++)

using

namespace

std;

vector

f[155];

int dp[155][155],du[155];

int n,m;

inline

void dfs(int u)

}int main()

fo(i,0,n) fo(j,0,n) dp[i][j]=200;

fo(i,1,n) dp[i][0]=0;

dfs(1);

fo(i,1,n)

ans=min(ans,dp[i][m]);

printf("%d\n",ans);

return

0;}

樹形dp題目彙總

1 hdu 1520 anniversary party 每個節點有權值,子節點和父節點不能同時選,問最後能選的最大價值是多少?解題報告 here 2 hdu 2196 computer 經典題,求樹每個點到其他點的最遠距離,轉化為有根樹,深搜兩次,一次記錄到葉子的最遠距離,一次更新最終答案。解題報...

樹形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...

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...