• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-80  評(píng)論-24  文章-0  trackbacks-0
            該問(wèn)題是一個(gè)經(jīng)典問(wèn)題,算法導(dǎo)論中的例題。
            題意是有若干個(gè)會(huì)議要開(kāi),每個(gè)會(huì)議給定開(kāi)始時(shí)間s和結(jié)束時(shí)間e,其中任意兩個(gè)會(huì)議i和j,若i的時(shí)間和j的時(shí)間有重疊(包括邊界相等情況),則認(rèn)為兩個(gè)會(huì)議不能同時(shí)進(jìn)行即沖突,現(xiàn)在要問(wèn)給定若干個(gè)會(huì)議,求最多能有多少會(huì)議不沖突,即最大會(huì)議兼容子集的大小。
            標(biāo)準(zhǔn)的貪心算法,可以先按照會(huì)議結(jié)束時(shí)間排序,然后再依次考慮每個(gè)會(huì)議。算導(dǎo)上的證明非常精彩,強(qiáng)烈建議捧讀。
            簡(jiǎn)單來(lái)說(shuō)就是利用了一個(gè)定理:
            對(duì)于任意非空子問(wèn)題Sij,其中Sij代表會(huì)議i到j(luò)的集合,設(shè)am是Sij中具有最早結(jié)束時(shí)間的會(huì)議,則會(huì)議am在Sij的最大兼容會(huì)議子集中被使用。
            其實(shí)該定理就是說(shuō)明為什么按照會(huì)議結(jié)束時(shí)間排序再依次考慮每個(gè)會(huì)議就能得出最優(yōu)解。
            該定理是這樣被證明的:設(shè)Aij為Sij的最大兼容會(huì)議子集,且將Aij中的會(huì)議按照結(jié)束時(shí)間遞增排序。又設(shè)ak為Aij的第一個(gè)回憶。若ak = am,則定理得證;否則若ak != am,則因?yàn)閍m是Sij中結(jié)束時(shí)間最早的會(huì)議,所以am.finish <= ak.finish,這樣肯定可以構(gòu)造新的兼容會(huì)議子集,Bij = (Aij - ak∪ am。而該子集包含的會(huì)議個(gè)數(shù)是和Aij的會(huì)議個(gè)數(shù)相等的!這就證明了am肯定包含在了Sij的最大兼容會(huì)議子集中。
            樣題見(jiàn)
            http://acm.nyist.net/JudgeOnline/problem.php?pid=14
            代碼如下:

             1 #include <cstdio>
             2 #include <cstdlib>
             3 
             4 #define MAX_EVENT 10005
             5 
             6 struct EVENT {
             7   int start;
             8   int finish;
             9 };
            10 
            11 EVENT event[MAX_EVENT];
            12 
            13 static int cmp(const void *a, const void *b) {
            14   EVENT *p = (EVENT *)a;
            15   EVENT *q = (EVENT *)b;
            16   return p->finish > q->finish;
            17 }
            18 
            19 int main() {
            20   int m;
            21   int n;
            22   scanf("%d", &m);
            23   while (m--) {
            24     scanf("%d", &n);
            25     int i;
            26     for (i = 0; i < n; ++i) {
            27       scanf("%d%d", &(event[i].start), &(event[i].finish));
            28     }   
            29     qsort(event, n, sizeof(EVENT), cmp);
            30     int res = 1;
            31     int max_finish = event[0].finish;
            32     for (i = 1; i < n; ++i) {
            33       if (event[i].start > max_finish) {
            34         res++;
            35         max_finish  = event[i].finish;
            36       }   
            37     }   
            38     printf("%d\n", res);
            39   }
            40   return 0;
            41 }

            貪心算法和動(dòng)態(tài)規(guī)劃算法是算法領(lǐng)域非常重要的兩類(lèi)算法,需要好好掌握。
            posted on 2012-09-16 12:32 myjfm 閱讀(1421) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 算法基礎(chǔ)
            国产精品99久久久久久董美香| 久久亚洲精品无码aⅴ大香| 久久人人爽人人爽人人爽 | 国产精品伦理久久久久久| 国产亚洲美女精品久久久2020| 久久香蕉国产线看观看猫咪?v| 精品久久久无码中文字幕天天| 久久久91精品国产一区二区三区 | 国产69精品久久久久9999APGF| 婷婷久久五月天| 女人高潮久久久叫人喷水| 天堂无码久久综合东京热| 久久久久久久91精品免费观看| 超级97碰碰碰碰久久久久最新| 思思久久99热只有频精品66| 亚洲色大成网站www久久九 | 2021久久精品国产99国产精品| 99久久精品毛片免费播放| 久久精品视频网| 精品久久久久中文字幕一区| 久久婷婷五月综合97色直播| 久久精品国产亚洲AV久| 久久精品国产亚洲AV麻豆网站| 国产精品视频久久久| 久久久无码精品午夜| 久久人人爽人人爽人人爽 | 久久国产精品无码网站| 久久亚洲中文字幕精品一区| 精品久久久久久无码不卡| 亚洲中文字幕无码久久2017| 久久久国产精品福利免费| 少妇被又大又粗又爽毛片久久黑人 | 色综合色天天久久婷婷基地| 久久久久久久综合日本亚洲| 热久久视久久精品18| 99精品久久精品| 伊人久久精品影院| 狠狠久久亚洲欧美专区| 国产激情久久久久影院老熟女免费 | 午夜精品久久久久久影视riav| 思思久久99热只有频精品66|