POJ 2342 (樹狀DP)入門

2021-07-16 12:25:21 字數 947 閱讀 5019

入門比較好的部落格

#include "cstdio"

#include "iostream"

#include "cstring"

#include "algorithm"

using namespace std;

const int max=6005;

/*樹形dp 入門

題意:公司舉辦 晚會,為了提高活躍度(每個人都有自己的活躍度),

下屬不能和直接上司一起出現,問最大活躍度

題解: dp[i][0] 第i個人不來 初始化為 0

dp[i][1] 第i個人來 初始化為活躍度

從葉子節點往上積累,

// 上司來,下屬不來

dp[root][1] += dp[i][0];

// 上司不來,下屬來,也可能不來 ,選最大

dp[root][0] += max(dp[i][0],dp[i][1]);

*/int n;

int dp[max][2],father[max];

// dp[i][0] 表示不去

// dp[i][1] 表示去

int vis[max];

int tree_dp(int root) }}

int main()

int root=0;// 記錄父節點

int u,v;

while(scanf("%d%d",&u,&v) &&u+v)

//查詢父節點,

while(father[root])

root=father[root];

tree_dp(root);

int ans=max(dp[root][1],dp[root][0]);

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

} return 0;

}

poj2342 樹形dp入門

題意 公司要舉辦一次晚會,但是為了使得晚會的氣氛更加活躍,每個參加晚會的人都不希望在晚會中見到他的直接上司 現在已知每個人的活躍指數和上司關係,求邀請哪些人來能使得晚會的總活躍指數最大。分析 毫無疑問肯定需要先建樹,然後就是從這棵樹裡面選擇一些點,當然不能暴力。我們用dp i 0 表示不選擇第i棵樹...

POJ 2342 (樹形dp入門)

樹形dp,現在才開始看,先敲個水題入個門吧,這個題很簡單,知道樹dp的概念大概就能做出來 我們用dp root 2 代表當前節點這個人是否參加當前聚會的方法數,dp i 0 代表不參加加,dp i 1 代表參加,那麼dp i 0 max dp j 0 dp j 1 dp i 1 dp j 0 其中j...

POJ 2342 樹形DP入門題

有乙個大學的慶典晚會,想邀請一些在大學任職的人來參加,每個人有自己的搞笑值,但是現在遇到乙個問題就是如果兩個人之間有直接的上下級關係,那麼他們中只能有乙個來參加,求請來一部分人之後,搞笑值的最大是多少。樹形dp入門題。dp部分 dp i 0 表示職員i不來參加party,以i為根的子樹的最大搞笑值,...