题目链接:http://poj.org/problem?id=2342
题意:n个人每个人有一个conviviality ratings,而且任何人之间是从属的关系。有一个活动,组织者希望来参加的人互相之间没有直接的从属关系,问最大conviviality ratings总和。
以1节点开始dfs,每次遍历时根据当前点来或者不来做决策,如果当前节点来,则它的儿子不来,否则两个都要遍历,取最大值。用dp(i,j)数组存状态,i表示编号j表示来(1)或者不来(0),dp(i,0)+=max(dfs(i's son, 0), dfs(i's son, 1)) dp(i,1)+=dfs(i's son, 0)
1 /* 2 ━━━━━┒ギリギリ♂ eye! 3 ┓┏┓┏┓┃キリキリ♂ mind! 4 ┛┗┛┗┛┃\○/ 5 ┓┏┓┏┓┃ / 6 ┛┗┛┗┛┃ノ) 7 ┓┏┓┏┓┃ 8 ┛┗┛┗┛┃ 9 ┓┏┓┏┓┃ 10 ┛┗┛┗┛┃ 11 ┓┏┓┏┓┃ 12 ┛┗┛┗┛┃ 13 ┓┏┓┏┓┃ 14 ┃┃┃┃┃┃ 15 ┻┻┻┻┻┻ 16 */ 17 #include 18 #include 19 #include 20 #include 21 #include 22 #include 23 #include 24 #include 25 #include 26 #include 27 #include 28 #include 29 #include 30 #include 31 #include 32 #include 33 #include