cdoj 1136 邱老師玩遊戲 樹形揹包

2022-04-01 02:01:35 字數 1191 閱讀 1631

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掃一遍,就把這個子節點更新了。...