樹形DP一般解題思路

2021-10-06 17:53:30 字數 791 閱讀 6355

注意先求下屬,再求上司

利用鏈式前向星儲存樹

//p1352 沒有上司的舞會

//#include

using

namespace std;

const

int maxn =

6e3+10;

int n,r[maxn]

,head[maxn]

;int cnt;

//邊的編號

int d[maxn]

;//統計編號節點父節點的個數

int dp[maxn][2

];//鏈式前向星

struct edgeedges[maxn]

;//這道題沒有權重,u起點,v終點

void

addegde

(int u,

int v)

void

dfs(

int root)

}int

main()

for(

int i =

1; i <= n-1;

++i)

//找到根節點

int root =0;

for(

int i =

1; i <= n;

++i)

}dfs

(root)

; cout <<

max(dp[root][1

],dp[root][0

]);}

動態規劃解題一般思路

摘自mooc的程式設計與演算法 一.遞迴到動規的轉換方法 遞迴函式有n個引數,就定義乙個n維的陣列,陣列的下標就是遞迴函式引數的取值範圍,陣列元素的值就是遞迴的返回值,這樣就可以從邊界值開始逐步填充陣列,相當於計算遞迴函式值的逆過程 二.動態規劃解題一般思路 1.將原問題分解成子問題 把原問題分解成...

動態規劃解題的一般思路

遞迴到動規的一般轉化方法 遞迴函式有n個引數,就定義乙個n維的陣列,陣列的下表是遞迴函式引數的取值範圍,陣列元素的值是遞迴函式的返回值,這樣就可以從邊界值開始,逐步填充陣列,相當於計算遞迴函式值的逆過程 動規解題的一般思路 1.將原問題分解為子問題 把原問題分解為若干個子問題,子問題和原問題形式相同...

01揹包(一般dp實現 樹形dp實現)

一般dp,要遍歷完整個二維陣列。include include using namespace std int dp 10000 10000 int w 10000 v 10000 bool chosen 10000 10000 intmain for int i 1 i m i else else...