注意先求下屬,再求上司。
利用鏈式前向星儲存樹
//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...