POJ 1065 貪心演算法(Dilworth定理)

2021-07-29 15:46:14 字數 1909 閱讀 8784

[poj 1065 傳送門](

id=5354)

鏈(chain)是乙個偏序集s的全序子集(所謂全序是指任意兩個元素可比較)

反鏈(antichain)是乙個偏序集s的子      集,其中任意兩個元素不可比較

極大(maximal)鏈:對乙個鏈c,如果找不到另乙個鏈c』,使得c是c』的真子集,那麼稱鏈c是極大的

極大(maximal)反鏈:對乙個反鏈a,如果找不到另乙個反鏈a』,使得a是a』的真子集,那麼稱反鏈a是極大的

最大鏈(maximum/longest):鏈c包含元素個數不少於任意其他鏈c』,則c是最大鏈

最大反鏈(maximum/largest):反鏈d包含元素的個數不少於任意其他鏈d』,則d是最大反鏈

(有上面推倒可知,最大鏈必然是極大鏈,最大反鏈必然是極大反鏈

dilworth定理說明,存在乙個反鏈a與乙個將序列劃分為鏈族p的劃分,使得劃分中鏈的數量等於集合a的基數。當存在這種情況時,對任何至多能包含來自p中每乙個成員乙個元素的反鏈,a一定是此序列中的最大反鏈。同樣地,對於任何最少包含a中的每乙個元素的乙個鏈的劃分,p也一定是序列可以劃分出的最小鏈族。偏序集的寬度被定義為a與p的共同大小。

由上面可知,仔細思考發現,此題是乙個很典型的dilworth定理的題目,給定了乙個集合k(我們姑且這麼認為),給出了length與weight這兩種不同集合的關係,即p1(<=length) 與 p2(<=weight)

。 不同於我們抽象理解上面定理,通俗理解,我們要對現有集合進行篩選,滿足乙個關係,無論是p1還是p2的關係,形成乙個新的集合k』。在此基礎上,我們再次求出,滿足剩餘的關係,無論p1還是p2。從而,找出最終的關係k」,既滿足p1又滿足p2,即 p1∪p2 的集合。

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

//定義具體的元素節點

struct datanode;

//存放節點的資料集k

datanode dataset[5001];

//使用了algorithm(演算法)庫的qsort函式,實現快排

int cmp (const

void *aa, const

void *bb)

else

}int main ()

//使用qsort函式

qsort(dataset,data_size,sizeof(dataset[0]),cmp);

//記錄我們需要的時間

int cnt_time = 0;

//要形成乙個滿足<=的偏序關係,此題目的偏序關係是:weight<= && lenght<= ,需要同時滿足,

//我們可以這麼認為,對於此集合s ,求出滿足weight<=的偏序集 ,又求出了length<= 的偏序集,

//對於這兩個偏序集合,我們求出並集,即是滿足條件的集合q

//標記我們的資料是否滿足關係(p1 或者 p2),放入集合中

bool pd_flag[5001];

//初始化標記陣列,當時的memset()函式突然無法起作用,現在還是不明原因

for (int i=0;ifalse;

}for (int i=0;iif (pd_flag[i] == false)//判斷dataset[i]是否已經放入某個集合中}}

}cout

0;}

poj 1065 最長上公升子串行

題意 有n支木棍,每只木棍有乙個長度 l 和 重量 w。每次處理第一只木根的時候要消耗 1 的時間,緊接其後的木棍們,若滿足 l 和 w 都大於當前的木棍,可以不用消耗時間。問在這樣的條件下,合理安排木棍處理順序,時間最小是多少。解析 先間 l 從小到大排序,然後求 w 的上公升子串行,每次求完標記...

貪心演算法poj 3617,3069,3253

想法 先生成乙個反著的字串,其實就是從兩邊開始找 先取出兩邊相比較小的字串。當然這裡有個問題,就是兩邊的頭乙個字元相同時,比較下乙個字元,直到比較完整個字串為止,找到較小的那邊的第乙個字元加上。其實用strcmp就可以很好的解決上面描述的操作。code include include include...

POJ 1328 貪心演算法

雷達安裝 時間限制 1000ms 記憶體限制 10000k 提交總數 109120 接受 24128 描述 假設滑行是無限直線。土地位於海岸的一側,海洋位於另一側。每個小島都位於海邊。並且任何位於滑行的雷達裝置只能覆蓋d距離,因此如果它們之間的距離最多為d 則可以通過半徑裝置覆蓋海中的島嶼。我們使用...