皇宮看守 樹形DP

2021-07-11 19:22:15 字數 2509 閱讀 8316

題意/description

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

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

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

/input:

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

/output:

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

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

第2行至第n+1行,每行描述每個宮殿結點資訊,依次為:該宮殿結點標號i(0

題解/

solution

題目說的很清楚,用最少的點覆蓋所有的點。題目給出的是個樹,所以可以用動態規劃來解決。

給出如下定義:

f[i,0]表示i點不放,且以i為根節點的子樹(包括i節點)全部被觀察到;

f[i,1]表示i點不放,且以i為根節點的子樹(可以不包括i節點)全部被觀察到;

f[i,2]表示i點放,且以i為根節點的子樹全部被觀察到;

轉移如下:

1、由f[i,0]定義可知,設j為i的兒子節點,至少要有乙個i的兒子節點是放置守衛的,其餘的兒子節點可放可不放,但由於根節點i不放,所以其餘的兒子節點如果不放的話,必須保證能被觀察到,即f[j][0];所以我們需要列舉必須放置的兒子節點,即下:

f[i,0] = min

其中k為列舉的必放的兒子節點,j為除了k之外的兒子節點

2、由f[i,1]定義可知,i可以被觀察到也可以不被觀察到,但兒子節點必須都要被觀察到,即下:

f[i,1] =∑(min(f[j,0],f[j,2])) 

j是i的兒子節點

3、由f[i,2]定義可知,i點放置了守衛,所以對於每個兒子節點都能被觀察到,取f[j,0],f[j,1],f[j,2]最小值即可,即下:

f[i,2] = min(f[j,0],f[j,1],f[j,2]) j是i的兒子節點

對於葉節點i,f[i,0] = f[i,2] = data[i],f[i,1] = 0;

講得已經十分詳細了,剩下自己解決吧。

**/

code

var

son:array [0..1501,0..1501] of longint;

f:array [0..1501,1..3] of longint;

a,l:array [0..1501] of longint;

n,x,t:longint;

function min(o,p:longint):longint;

begin

if oj then

k:=k+min(f[son[x,j],1],f[son[x,j],3]);

f[x,1]:=min(f[x,1],k+f[son[x,i],3]);

end;

f[x,2]:=0;

for i:=1 to l[x] do

f[x,2]:=f[x,2]+min(f[son[x,i],1],f[son[x,i],3]);

f[x,3]:=a[x];

for i:=1 to l[x] do

f[x,3]:=f[x,3]+min(f[son[x,i],1],min(f[son[x,i],2],f[son[x,i],3]));

end;

procedure init;

var i,j:longint;

d:array [0..1501] of longint;

begin

readln(n);

fillchar(d,sizeof(d),0);

for i:=1 to n do

begin

read(x,a[x],l[x]);

for j:=1 to l[x] do

begin

read(son[x,j]);

inc(d[son[x,j]]);

end;

readln;

end;

for i:=1 to n do

if d[i]=0 then

begin

t:=i;

break;

end;

end;

begin

init;

main(t);

write(min(f[t,1],f[t,3]));

end.

皇宮看守(樹形dp)

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

皇宮看守 樹形DP

time limit 10000ms memory limit 65536k total submit 63 accepted 27 case time limit 1000ms description 太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一...

皇宮看守 樹形DP

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