皇宮看守 樹形DP

2021-10-09 04:24:55 字數 3124 閱讀 1829

time limit:10000ms memory limit:65536k

total submit:63 accepted:27

case time limit:1000ms

description

太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。

皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀;某些宮殿間可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。

可是陸小鳳手上的經費不足,無論如何也沒法在每個宮殿都安置留守侍衛。

幫助陸小鳳布置侍衛,在看守全部宮殿的前提下,使得花費的經費最少。

input

輸入檔案中資料表示一棵樹,描述如下:

第1行 n,表示樹中結點的數目。

第2行至第n+1行,每行描述每個宮殿結點資訊,依次為:該宮殿結點標號i(0對於乙個n(0 < n<=1500)個結點的樹,結點標號在1到n之間,且標號不重複。

output

輸出檔案僅包含乙個數,為所求的最少的經費。

sample input

61 30 3 2 3 4

2 16 2 5 6

3 5 0

4 4 0

5 11 0

6 5 0

sample output

25解題思路

設f [d

ep][

0]

f[dep][0]

f[dep]

[0]為第dep個節點放士兵,f[d

ep][

1]

f[dep][1]

f[dep]

[1]為第dep個節點不放,被子節點監視,f[d

ep][

2]

f[dep][2]

f[dep]

[2]為第dep個節點不放,被父節點監視。

第d ep

depde

p個節點有士兵了,那麼子節點放與不放都可以。

f[dep][0

]+=min(f[a[i]

.x][0]

,min

(f[a[i]

.x][1]

,f[a[i]

.x][2]

));}

f[dep][0

]+=w[dep]

;//因為放了,所以最後要加上他的經費(在迴圈外)

第dep

depde

p個節點被父節點監視,所以第dep節點的子節點不會被監視到,那麼子節點的子節點 就要放士兵,用來監視第dep

depde

p節點的子節點。

f[dep][2

]+=f[a[i]

.x][1]

;

f[d

ep][

1]

f[dep][1]

f[dep]

[1]求起來略顯複雜

因為被子節點監視,只需要乙個子節點監視即可,其他子節點可放可不放,所以先對子節點可放可不放的和做乙個預處理。

for

(int i=h[dep]

;i;i=a[i]

.next)

min

minmi

n(所有子節點可放可不放的和(tttt

tt)- 當前子節點可放可不放(tmp

[i

]tmp[i]

tmp[i]

)+當前子結點必須放(f[a

[i].

x][0

]f[a[i].x][0]

f[a[i]

.x][

0]))這個式子就可以求出當前子節點放士兵監視的值了

for

(int i=h[dep]

;i;i=a[i]

.next)

f[dep][1

]=min(tt-tmp[i]

+f[a[i]

.x][0]

,f[dep][1

]);

**

#include

#include

#include

#include

#include

using namespace std;

const int inf

=0x7f7f7f7f

;int n,root,w[

2010

],h[

2010

],bsy[

2010

],x,y,k,kk;

long long tmp[

2010

],f[

2010][

3];//記得開long long,這玩意兒真的坑死

struct ca[

4010];

void

add(int x,int y)

void

dfs(int dep)

f[dep][0

]+=w[dep]

;//記得放士兵要加上士兵費

long long tt=0;

memset

(tmp,0,

sizeof

(tmp));

for(int i=h[dep]

;i;i=a[i]

.next)

f[dep][1

]=inf;

for(int i=h[dep]

;i;i=a[i]

.next)

f[dep][1

]=min(tt-tmp[i]

+f[a[i]

.x][0]

,f[dep][1

]);}

int main()

}for

(int i=

1;i<=n;i++)if

(!bsy[i]

)}

皇宮看守 樹形DP

題意 description 太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀 某些宮殿間可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。可是陸小鳳手上的經費不足,無論如何也沒法...

皇宮看守(樹形dp)

description 太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀 某些宮殿間可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。可是陸小鳳手上的經費不足,無論如何也沒法在每個...

皇宮看守 樹形DP

太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀 某些宮殿間可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。可是陸小鳳手上的經費不足,無論如何也沒法在每個宮殿都安置留守侍衛。程式...