一群人參加聚會,但是每個人都不想和老闆一起參加,問最可以多少人參加。
狀態方程簡單:
dp[i][0] += max
dp[i][1] += dp[i][0];
判斷唯一性有點難想,加乙個狀態opt[i][2]
判斷是哪個狀態轉移過來的,然後根據轉移過來的狀態來判斷現在狀態。
注意了 dp[v][1]==dp[v][0] 是關鍵點,多解的源頭就在這裡。
#include#include#include#include#include#include#include#include#include#include#includeusing namespacestd;typedef
long long
lld;typedef
unsigned int
ud;#define oo 0x3f3f3f3f#define maxn 205
intdp[maxn][2];
intopt[maxn][2];
intfather[maxn];
intn;vector<
int>g[maxn];map<string,
int>mat;
voidtree_dp(
intu)
}int
main
()tree_dp(root);
if(dp[root][1] >dp[root][0] &&opt[root][1] ==1)printf("%d yes\n",dp[root][1]);
else if
(dp[root][0] >dp[root][1] &&opt[root][0] ==1)printf("%d yes\n",dp[root][0]);
elseprintf("%d no\n",max(dp[root][0],dp[root][1]));
}return0;
}
HDU 1520 簡單樹形dp
題意 乙個大學要舉行職工party。為使party中每個人都玩的開心,直接上司和下屬關係的員工不能同時參加。每個人都有各自的歡樂值。問如何邀請使得總歡樂值最大。dp i 1 表示選擇i點 dp i 0 表示不選擇i點 include include include include using nam...
HDU 2196 樹形dp入門
鏈結 傳送門 題意 給你乙個n個節點的棵樹,然後給你和 第i臺電腦與第a臺電腦相連的花費 v 問你最長的線路是多長 求樹上任意節點所能達到的最遠點的距離 樹形dp 開個陣列 分別記錄這個點到子樹最遠節點的最長距離和次長距離和記錄到父節點上的最長距離這樣在樹上dp 1.求子樹最長和次長 dp u 0 ...
題解 hdu2196 樹形DP
題目鏈結 分析 求乙個樹中所有節點能到達的最遠距離f i 要用兩個dfs。首先第乙個dfs求出所有每個節點i在其子樹中的正向最大距離和正向次大距離和dist i 0 和dist i 1 如果i節點在子樹中最大距離經過了2號兒子,那麼次大距離就是不經過2號兒子的最大距離 並且還要標記longest i...