• <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>

            A Za, A Za, Fighting...

            堅信:勤能補拙

            USACO Barn Repair

            問題:
            http://ace.delos.com/usacoprob2?a=KIjVa3gj0ap&S=barn1

            思路:
            簡單的貪心算法
            一直不敢怎么用貪心算法(這題比較好理解),因為不知道該如何證明其正確性
            如何保證每次選擇當前最優(yōu)解最后可以得到整體的最優(yōu)解?

            對于該題:
            假設(shè)存在M塊boards,那么從最左端到最右端(指存在cow的stall)可以存在M-1處gap
            最優(yōu)子結(jié)構(gòu):
            設(shè)f(x)表示存在x塊boards時的the minimum number of stalls that must be blocked,那么
                         f(x) = min(f(x-1) + gap[i] that hasn't been selected)
            貪心選擇性質(zhì): 每次從尚未選擇過的gaps中選擇最大的gap即可得到最優(yōu)解(假設(shè)為gap[x1], gap[x2], ...gap[x(M-1)])
            證明(反證):
            假設(shè)存在一個最優(yōu)解,其不包含gap[x(i)]
            那么,采用cut-and-paste方法即可證明其不是最優(yōu)解

            代碼:
             1 /*
             2 ID: simplyz2
             3 LANG: C
             4 TASK: barn1
             5 */
             6 #include<stdio.h>
             7 #include<stdlib.h>
             8 #include<string.h>
             9 #define MAX_LEN 205
            10 #define Min(a,b) ((a)<(b) ? (a) : (b))
            11 int M, S, C;
            12 int rt, stalls[MAX_LEN], diff[MAX_LEN];
            13 
            14 int
            15 asc_cmp(const void *arg1, const void *arg2)
            16 {
            17     return (*(int *)arg1) - (*(int *)arg2);
            18 }
            19 
            20 int
            21 desc_cmp(const void *arg1, const void *arg2)
            22 {
            23     return (*(int *)arg2) - (*(int *)arg1);
            24 }
            25 
            26 void
            27 init()
            28 {
            29     int i;
            30     for(i=0; i<C; i++
            31         scanf("%d", stalls+i);
            32     qsort(stalls, C, sizeof(int), asc_cmp);
            33     rt = stalls[C-1- stalls[0+ 1;
            34     for(i=1; i<C; i++)
            35         diff[i-1= stalls[i] - stalls[i-1- 1;
            36     qsort(diff, C-1sizeof(int), desc_cmp);
            37 }
            38 
            39 void
            40 solve()
            41 {
            42     int i, up;
            43     up = Min(C-1, M-1);
            44     for(i=0; i<up; i++)
            45         rt -= diff[i];
            46     printf("%d\n", rt);
            47 }
            48 
            49 int
            50 main(int argc, char **argv)
            51 {
            52     freopen("barn1.in""r", stdin);
            53     freopen("barn1.out""w", stdout);
            54     while(scanf("%d %d %d"&M, &S, &C) != EOF) {
            55         init();
            56         solve();
            57     }
            58     return 0;
            59 }

            posted on 2010-09-29 10:49 simplyzhao 閱讀(265) 評論(0)  編輯 收藏 引用 所屬分類: D_貪心

            導(dǎo)航

            <2011年5月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            欧美午夜A∨大片久久| 日韩AV毛片精品久久久| 99久久精品午夜一区二区| 国产精品久久久久9999| 久久久久国产一区二区三区| 亚洲人成伊人成综合网久久久| 国产精品岛国久久久久| 伊人伊成久久人综合网777| a级成人毛片久久| 亚洲国产一成久久精品国产成人综合| 久久久久久人妻无码| 亚洲国产成人久久综合碰| 国产精品久久久久影院色| 日韩人妻无码一区二区三区久久99| 好久久免费视频高清| 99久久国产精品免费一区二区| 国产精品久久久99| 久久精品国产影库免费看| 人妻无码αv中文字幕久久| 无码任你躁久久久久久老妇| 好属妞这里只有精品久久| 久久精品亚洲一区二区三区浴池| 伊人久久精品影院| 亚洲欧美精品一区久久中文字幕| 99久久精品国产综合一区| 国产精品对白刺激久久久| 久久人人爽爽爽人久久久| 国色天香久久久久久久小说| 久久久久久免费视频| 欧美精品丝袜久久久中文字幕| 久久久久国产精品| 青青草原综合久久大伊人精品| 久久久久亚洲精品天堂| 久久无码人妻一区二区三区| 亚洲国产精品无码久久一线| 日产精品久久久一区二区| 久久精品国产亚洲AV嫖农村妇女| 蜜臀久久99精品久久久久久小说| 色婷婷综合久久久久中文一区二区| 久久水蜜桃亚洲av无码精品麻豆| 精品久久久久久国产潘金莲 |