基本樹形dp及例題

2021-06-21 05:10:33 字數 2428 閱讀 5442

#include #include #include #include #include #include #define n 6005                            //樹形dp poj2342

using namespace std;

struct tree

}p[n];

void dfs(int x)

return ;

}int main()

while(scanf("%d%d", &l, &k)!=eof&&l+k!=0)

for(t=1; t<=n; ++t)

}} return 0;

}

#include #include #include #include #include #include #include #include #include #define ll long long 

#define inf 0x7fffffff

#define n 250

using namespace std; //hdu2412 樹形dp及最佳方案是否唯一

int dp[n][2], dup[n][2]; //dp[n][m]中m為0表示不來,m為1表示來, dup[n][m]表示最佳的方案是不是唯一的,dup[n][m]中m為0表示不唯一,m為1表示唯一

maps;

/*題意:n個人形成乙個關係樹,每個節點代表乙個人,節點的根表示這個人的唯一的直接上司,只有根沒有上司。

要求選取一部分人出來,使得每2個人之間不能有直接的上下級的關係,求最多能選多少個人出來,並且求出獲得最大人數的選人方案是否唯一。

思路:樹形dp

dp[x][0]+=max(dp[k][0], dp[k][1]); k是x的孩子

dp[x][1]+=dp[k][0];

*/struct node

}p[n];

void dfs(int x)

if(!s[s2])

id1=s[s1];

id2=s[s2];

p[id1].pre=id2;

p[id1].brother=p[id2].son;

p[id2].son=id1;

} dfs(1);

int ans, flag=0;

if(dp[1][0]>dp[1][1])

else if(dp[1][0]

#include #include #include #include #include #include #include #include #include #define ll long long

#define inf 0x7fffffff

#define n 2500

using namespace std; //hdu1054 樹形dp

int dp[n][2];

struct node

}p[n];

void dfs(int x)

return ;

}int main()

for(t=0; t

#include #include #include #include #include #include #include #include #include #define ll long long

#define inf 0x7fffffff

#define n 10100

using namespace std; //hdu 2196 樹形dp

int vis[n], pre[n], dp[n][3]; //dp[n][m]中n是節點編號, m為0表示從下到上節點的最大值, m為1表示從小到上第2大值, m為2表示從上到下的最大值

/*題意:給你一棵樹,求樹上各個節點到其他節點的距離中的最大值

思路:先用鄰接表建樹,樹形dp

*/struct node

p[n<<1];

void init()

void dfs1(int x) //從下到上

else if(dp[p[j].v][0]+p[j].w>bigger)

dp[x][0]=biggest;

dp[x][1]=bigger;

} return ;

}void dfs2(int x) //從上到下

}int main()

dfs1(1); //從下到上遞推,求出dp[n][0]和dp[n][1]

memset(vis, 0, sizeof(vis));

dfs2(1); //從上到下

for(t=1; t<=n; ++t)

printf("%d\n", max(dp[t][0], dp[t][2]));

} return 0;

}

樹形DP例題

dp感覺還是有點陌生,但是這個必須要強化,這類題型實在是太常見了 一道比較經典的樹形dp入門題。設dp陣列 dp root 0 表示對於該節點不選 dp root 1 表示對於該節點擊 則有 dp root 0 max dp son 0 dp son 1 dp root 1 dp son 0 主要可...

樹形DP 經典例題 沒有上司的舞會

一般樹形dp題目中都是其中某種狀況如果想要發生必須先完成先決條件 如 這道舞會題,要保證職員去參加舞會的話,必須滿足他的直接上司不去 還有的占領城堡的題,要占領乙個城堡必須先占領另乙個城堡。看到這樣的情況就考慮一下樹形dp 題目描述 ural大學有n個職員,編號為1 n。他們有從屬關係,也就是說他們...

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