hdu1011(揹包樹形DP)

2021-06-22 22:11:05 字數 624 閱讀 5563

沒有完全理解這題,

m個人,攻打乙個map,map的入口是1,在攻打某個結點之前要先攻打其他乙個結點

dp[i][j]表示m個人攻打以第i個結點為根節點的子樹得到的最優解

狀態轉移dp[i][ j ] = max(dp[i][j], dp[i][k]+dp[t][j-k]),其中t是i結點的子節點

**如下:

#include#include#include#include#include#include#include#include#include#include#include#include#define n 105

#define inf 0x7ffffff

#define eps 1e-9

#define pi acos(-1.0)

#define p system("pause")

using namespace std;

int dp[n][n],vis[n];

vectormp[n];

int n,m;

struct node

s[n];

void dfs(int p)

}}int main()

if(m == 0)

{cout<<0<

HDU 1011 星河戰隊 樹形DP

題意是說在乙個洞穴中有許多房間,每個房間中有一些蟲子和大腦,這些房間之間用隧道相連形成一棵樹,士兵們殺蟲子的能力有限,也可以直接殺死蟲子而不消耗士兵戰鬥力,但這樣就無法得到房間中的大腦,士兵們不能走回頭路,問給定士兵數量時能得到的大腦最大值。在樹上進行動態規劃,對於每個節點來說,選擇了它,就要損失士...

hdu 1011 樹型DP(依賴揹包)

題意 你作為星河站隊的leader,手下有m個trooper 現在讓你去攻占乙個基地 有n個洞穴組成,入口是洞穴1,洞穴之間用n 1條邊鏈結,每個洞穴裡面包括x個 bugs,和他們的brains,你的每個trooper可以消滅20個bugs 問你最多可以得到多少個brains。需要注意的是 你沒做過...

HDU 1561 樹形dp 揹包

分析 攻下一座城堡的前提是要先攻下它的前驅城堡,建立乙個以0為根結點的樹,他的權值為0 dp i,j 表示以i為根結點去j個的最大值。dp i,1 v i v i 為攻下i城堡獲得的寶藏 對與u結點取j 1個,可以轉化為以孩子i為根取k個 以自己為根取j 1 k個和自己取j 1個的最大值 為什麼是j...