【問題描述】
太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。 皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀;有邊直接相連的宮殿可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。 可是陸小鳳手上的經費不足,無論如何也沒法在每個宮殿都安置留守侍衛。
程式設計任務:幫助陸小鳳布置侍衛,在看守全部宮殿的前提下,使得花費的經費最少。
【輸入格式】
輸入檔案中資料表示一棵樹,描述如下:
第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 太平王世子事件後,陸小鳳成了皇上特聘的御前一品侍衛。皇宮以午門為起點,直到後宮嬪妃們的寢宮,呈一棵樹的形狀 某些宮殿間可以互相望見。大內保衛森嚴,三步一崗,五步一哨,每個宮殿都要有人全天候看守,在不同的宮殿安排看守所需的費用不同。可是陸小鳳手上的經費不足,無論如何也沒法在每個...