戰略遊戲 樹形DP入門)

2022-05-29 21:15:15 字數 1131 閱讀 4264

題目鏈結:here

題目分析:

放置哨兵無非兩種情況,放或不放,我們可以用dp[i][1]來表示第i個結點放置哨兵,dp[i][0]來表示第i個結點不放置哨兵,我們可以從上往下,從左往右來遍歷樹,所以這就用到了樹形dp的知識,我們很容易知道,如果父親結點沒放哨兵,那麼子結點肯定要放置哨兵,如果父親放置了哨兵,那麼子結點可以考慮放或者不放。所以很容易寫出狀態轉移方程dp[v][1] += min(dp[u][1],dp[u][0]),dp[v][0] += dp[u][1]

ac**:

1 #include 2

using

namespace

std;

3 typedef long

long

ll;4

const

int maxn = 1500+10;5

const

int mod = 1e9+7;6

const

int inf = 0x3f3f3f3f;7

89struct

nodee[maxn<<1

];12

intn;

13int

head[maxn];

14int

tot;

15int dp[maxn][2

];16

17void

init()

2122

void addedge(int u,int

v)25

26void dfs(int u,int

fa)34}35

36int

main()

3747}48

49for(int i=0;i<=n;i++)

53 dfs(0,-1

);54

int minn =inf;

55 minn = min(dp[0][1], dp[0][0

]);56 printf("

%d\n

",minn);

57return0;

58 }

樹形DP 戰略遊戲

鮑勃喜歡玩電腦遊戲,特別是戰略遊戲,但有時他找不到解決問題的方法,這讓他很傷心。現在他有以下問題。他必須保護一座中世紀城市,這條城市的道路構成了一棵樹。每個節點上的士兵可以觀察到所有和這個點相連的邊。他必須在節點上放置最少數量的士兵,以便他們可以觀察到所有的邊。你能幫助他嗎?例如,下面的樹 只需要放...

樹形DP 戰略遊戲

description input 輸入檔案中資料表示一棵樹,描述如下 第一行 n,表示樹中結點的數目。第二行至第n 1行,每行描述每個結點資訊,依次為 該結點標號i,k 後面有k條邊與結點i相連 接下來k個數,分別是每條邊的另乙個結點標號r1,r2,rk。對於乙個n 0 n 1500 個結點的樹,...

動態規劃 樹形DP 題解 戰略遊戲

題意思路 woj 2532 戰略遊戲 洛谷p2016 戰略遊戲 這道題主要是看邊的情況。第一行 n,表示樹中結點的數目。第二行至第n 1行,每行描述每個結點資訊,依次為 該結點標號i,k 後面有k條邊與結點i相連 接下來k個數,分別是每條邊的另乙個結點標號r1,r2,rk。對於乙個n 0輸出檔案僅包...