time limit: 20 sec
memory limit: 256 mb
邱老師最近在玩一種戰略遊戲,在乙個地圖上,有n座城堡,每座城堡都有一定的寶物,在每次遊戲中邱老師允許攻克m個城堡並獲得裡面的寶物。
但由於地理位置原因,有些城堡不能直接攻克,要攻克這些城堡必須先攻克其他某乙個特定的城堡。你能幫邱老師算出要獲得盡量多的寶物應該攻克哪m個城堡嗎?
input
每個測試例項首先包括2個整數,n,m.(1 <= m <= n <= 200);
在接下來的n行裡,每行包括2個整數,a,b.
在第 i 行,a 代表要攻克第 i 個城堡必須先攻克第 a 個城堡,如果 a = 0 則代表可以直接攻克第 i 個城堡。b 代表第 i 個城堡的寶物數量, b >= 0。
當n = 0, m = 0輸入結束。
output
對於每個測試例項,輸出乙個整數,代表邱老師攻克m個城堡所獲得的最多寶物的數量。
sample input
3 20 1
0 20 3
7 42 2
0 10 4
2 17 1
7 62 2
0 0sample output
513
題意
題解:
樹形揹包,可以理解為一共有n+1個點,只有n條邊,然後我們以0點為根
跑裸的樹形01揹包就好了
**
#include#include#include
#include
using
namespace
std;
vector
q[205
];long
long dp[205][205
];int vis[205
];int b[205
];int
n,m;
void dfs(intx)}
intmain()
dfs(0);
printf(
"%lld\n
",dp[0
][m]);
}}
cdoj 1136 邱老師玩遊戲 樹形揹包
邱老師玩遊戲 time limit 20 sec memory limit 256 mb 題目連線 description 邱老師最近在玩一種戰略遊戲,在乙個地圖上,有n座城堡,每座城堡都有一定的寶物,在每次遊戲中邱老師允許攻克m個城堡並獲得裡面的寶物。但由於地理位置原因,有些城堡不能直接攻克,要攻...
cdoj 1136 邱老師玩遊戲 樹形揹包
time limit 20 sec memory limit 256 mb 邱老師最近在玩一種戰略遊戲,在乙個地圖上,有n座城堡,每座城堡都有一定的寶物,在每次遊戲中邱老師允許攻克m個城堡並獲得裡面的寶物。但由於地理位置原因,有些城堡不能直接攻克,要攻克這些城堡必須先攻克其他某乙個特定的城堡。你能幫...
CDOJ 1136 樹形01揹包
dp u i 表示在以u為根節點的子樹上,選i個物品的最大價值。然後轉移方程就是dp u j max dp u j dp u j k dp v k 就是他可以從當前已更新的部分選j k個,然後在要更新的那個兒子節點那裡選k個,v是當前更新到的子節點,這樣把k從1到j 1掃一遍,就把這個子節點更新了。...