沒有完全理解這題,
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...