皇宮看守(guard)

2021-06-28 05:36:05 字數 2365 閱讀 8870

【問題描述】

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

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

【輸入格式】 

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

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

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

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

【輸入樣例】

1 30 3 2 3 4

2 16 2 5 6

3 5 0

4 4 0

5 11 0

6 5 0

【輸出樣例】

【解析】

這道題也是一道樹形狀態的動態規劃啦.. #我在用肺說話..

這道題需要我們去定每乙個點的狀態.. 也就是關於該點是否有人和是否安全..

f[i][0]表示i點 沒人安全所需的最小花費

f[i][1]表示i點 沒人

不安全 所需的最小花費

f[i][2]表示i點有人 安全所需的最小花費

f[i][3]表示i點有人不安全所需的的最小花費.. #第四種就不說啦.. 既然有人怎麼會不安全呢.. 那麼就可以不定義這種狀態..

這個時候也許你就會問了.. f[i][1]有什麼用.. 沒人不安全的最小花費不就是0嗎

這你就錯了.. 我定義這些最小花費的前提是當前節點i為根的數中所有孩子節點都是安全情況下的..

那麼問題來了 = =

沒人並且安全這種狀態怎麼得到0.0.

如果想讓乙個節點沒人安全,孩子節點中必須要有乙個是有人的,但有人的孩子節點又可以有很多..

問題就出在這裡.. 這個問題想了我挺久..

void tree_dp ( int x )

f1 += f[y][0];

f2 += _min ( f[y][0], _min ( f[y][1], f[y][2] ) );

} if ( bk == false ) f0 += minn;

f[x][0] = f0;

f[x][1] = f1;

f[x][2] = f2;

}

注意看以上**關於f0、minn的部分.. 

我在孩子節點中間找乙個從沒人安全到有人安全的最小增加的花費(在這裡我預設所有孩子節點有人安全都比沒人安全花費多)

那麼假如有乙個孩子節點的有人安全沒人安全的花費少,那麼不就解決了需要有人的這個問題了嗎..就加上孩子節點有人安全的花費並標記bk已經找到了有人花費少的節點

最後如果還是沒有,那就加上minn..

詳細的就自己看吧..

【完整**】

#include #include #include using namespace std;

struct node a[2100]; int first[2100], len, n;

void ins ( int x, int y )

int f[2100][3], w[2100];

int _min ( int x, int y )

void tree_dp ( int x )

f1 += f[y][0];

f2 += _min ( f[y][0], _min ( f[y][1], f[y][2] ) );

} if ( bk == false ) f0 += minn;

f[x][0] = f0;

f[x][1] = f1;

f[x][2] = f2;

}bool v[2100];

int main ()

} int st;

for ( i = 1; i <= n; i ++ )

} tree_dp (st);

printf ( "%d\n", _min ( f[st][0], f[st][2] ) );

return 0;

}

LOJ 皇宮看守

題目鏈結 點加權的最小覆蓋 題目說的很清楚,用最少的點覆蓋所有的點。題目給出的是個樹,所以可以用動態規劃來解決。給出如下定義 f i,0 表示i點不放,i可以被父親節點觀察到 f i,1 表示i點不放,i可以被兒子節點觀察到 f i,2 表示i點放,在i處設定警衛 轉移如下 1 由f i,0 定義可...

皇宮看守 樹形DP

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

皇宮看守(樹形dp)

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