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

            糯米

            TI DaVinci, gstreamer, ffmpeg
            隨筆 - 167, 文章 - 0, 評論 - 47, 引用 - 0
            數據加載中……

            POJ 2430 Lazy Cows 動態規劃

            屬于狀態型的動態規劃,特難搞的那一類,狀態一多,轉換的時候難免遺漏一兩個。
            這題還算,借助數據搞出來了,漏了兩個轉移,結果一組數據過不了。
            后來加上就AC了,時間還行,32MS。

            思路:
            從左往右開始放矩形,假設現在準備擺放第i列之后的矩形。
            實際上我們只關注第i-1列是怎么擺的,前面怎么擺都無所謂。
            所以,
            第i列牛的狀態 + 第i-1列擺放的狀態 -> 第i列擺放的狀態
            擺放的狀態有五種:
            1. 光上面有
            2. 光下面有
            3. 上下都有但不屬于同一個矩形
            4. 空
            5. 上下都有并且屬于同一個矩形
            牛的狀態有四種,就是1~4。

            然后就看怎么推了,詳見代碼。
            代碼中對狀態的定義也是按照上面的順序。

            在網上找解題報告,發現有的大牛代碼很短很快很牛逼!佩服!

            ps:
            一開始這份代碼用g++和gcc提交是WA的,但c++提交可以AC。
            我在本地測試了一下,發現g++和gcc編譯后,數據是跑得過的。我的gcc版本很高,是4.3.3。
            不知道是北大的網站有問題,還是我的代碼有問題。不過后者可能性大很多。
            后來,我把inline去掉(#define inline),再用g++、gcc提交,就過了!
            很想不通,寫其他代碼的時候,也是gcc編譯的,不都是這樣寫 inline 的嗎,也沒見出什么問題,也不可能出問題。
            所以希望高手給指點一下!謝謝!


            代碼:

            #include <stdio.h>
            #include 
            <stdlib.h>

            enum {
                UP, DOWN, UPDOWN, SPACE, CONN
            }
            ;

            #define MAX_N 1024
            #define MAX_AREA (15000000 * 2)

            #define inline

            struct cow_node {
                
            int y, x;
            }
            ;
            int dp[2][5][MAX_N], (*cur)[MAX_N], (*pre)[MAX_N];
            struct cow_node cows[MAX_N];
            int N, K, B, max_k;

            int cmp(const void *a, const void *b)
            {
                
            return ((struct cow_node *)a)->- ((struct cow_node *)b)->x;
            }


            inline 
            int min(int a, int b)
            {
                
            return a < b ? a : b;
            }


            inline 
            void swap(void *a, void *b)
            {
                
            void *= *(void **)a;
                
            *(void **)a = *(void **)b;
                
            *(void **)b = t;
            }


            inline 
            void init(int (*t)[MAX_N])
            {
                
            int i;

                
            for (i = 0; i <= max_k + 4; i++
                    t[
            0][i] = t[1][i] = t[2][i] = t[3][i] = t[4][i] = MAX_AREA;
            }


            #if 0
            inline 
            void dump(int (*t)[MAX_N], int ptn)
            {
            #define dbp printf
                
            int i, j;
                
            const char *strs[] = {
                    
            "up""down""updown""space""conn"
                }
            ;
                
            const char *ptns[] = {
                    
            "*\n\n""\n*\n""*\n*\n""\n\n" 
                }
            ;

                dbp(
            "---------\n%s", ptns[ptn]);
                
            for (i = 0; i < 5; i++{
                    dbp(
            "%s: ", strs[i]);
                    
            for (j = 0; j <= max_k; j++)
                        dbp(
            "%d->%d ", j, t[i][j]);
                    dbp(
            "\n");
                }

                dbp(
            "\n");
            #undef dbp
            }

            #else
            #define dump() {}
            #endif

            inline 
            void calc(int ptn, int space_cnt)
            {
                
            int i;

            #define UPDATE(_from, _to, _a_used, _k_used) \
                cur[_to][i 
            + _k_used] = min(cur[_to][i + _k_used], pre[_from][i] + _a_used)
                
            #define CASE(_ptn, _code) \
                
            if (ptn == _ptn) {    \
                    
            for (i = 0; i <= max_k; i++) \
                        _code    \
                }

                
                init(cur);

                CASE(UP, 
            {
                    UPDATE(UP, UP, 
            10);
                    UPDATE(UPDOWN, UP, 
            10);
                    UPDATE(UPDOWN, UPDOWN, 
            20);
                    UPDATE(DOWN, UP, 
            11);
                    UPDATE(DOWN, UPDOWN, 
            21);
                    UPDATE(CONN, CONN, 
            20);
                    UPDATE(CONN, UP, 
            11);
                    UPDATE(SPACE, UP, 
            11);
                    UPDATE(SPACE, CONN, 
            21);
                }
            );

                CASE(DOWN, 
            {
                    UPDATE(DOWN, DOWN, 
            10);
                    UPDATE(UPDOWN, DOWN, 
            10);
                    UPDATE(UPDOWN, UPDOWN, 
            20);
                    UPDATE(UP, DOWN, 
            11);
                    UPDATE(UP, UPDOWN, 
            21);
                    UPDATE(CONN, CONN, 
            20);
                    UPDATE(CONN, DOWN, 
            11);
                    UPDATE(SPACE, DOWN, 
            11);
                    UPDATE(SPACE, CONN, 
            21);
                }
            );

                CASE(UPDOWN, 
            {
                    UPDATE(UP, UPDOWN, 
            21);
                    UPDATE(UPDOWN, UPDOWN, 
            20);
                    UPDATE(DOWN, UPDOWN, 
            21);
                    UPDATE(CONN, CONN, 
            20);
                    UPDATE(SPACE, CONN, 
            21);
                    UPDATE(SPACE, UPDOWN, 
            22);
                }
            );

                CASE(SPACE, 
            {
                    UPDATE(UP, SPACE, 
            00);
                    UPDATE(UP, UP, space_cnt, 
            0);
                    UPDATE(DOWN, SPACE, 
            00);
                    UPDATE(DOWN, DOWN, space_cnt, 
            0);
                    UPDATE(UPDOWN, SPACE, 
            00);
                    UPDATE(UPDOWN, UPDOWN, space_cnt
            *20);
                    UPDATE(UPDOWN, UP, space_cnt, 
            0);
                    UPDATE(UPDOWN, DOWN, space_cnt, 
            0);
                    UPDATE(CONN, SPACE, 
            00);
                    UPDATE(CONN, CONN, space_cnt
            *20);
                    UPDATE(SPACE, SPACE, 
            00);
                }
            );

            #undef UPDATE
            #undef CASE

                dump(cur, ptn);

                swap(
            &cur, &pre);
            }



            int main()
            {
                
            int i;

                freopen(
            "e:\\test\\in.txt""r", stdin);

                scanf(
            "%d%d%d"&N, &K, &B);
                
            for (i = 0; i < N; i++
                    scanf(
            "%d%d"&cows[i].y, &cows[i].x);
                qsort(cows, N, 
            sizeof(cows[0]), cmp);

                cur 
            = dp[0];
                pre 
            = dp[1];
                max_k 
            = 2;
                init(pre);
                pre[SPACE][
            0= 0;
                
            for (i = 0; i < N; ) {
                    max_k 
            = min(i + 2, K);
                    
            if (i && cows[i - 1].x + 1 != cows[i].x) 
                        calc(SPACE, cows[i].x 
            - cows[i - 1].x - 1);
                    
            if (i + 1 < N && cows[i + 1].x == cows[i].x) {
                        calc(UPDOWN, 
            0);
                        i 
            += 2;
                    }
             else {
                        calc(cows[i].y 
            == 1 ? UP : DOWN, 0);
                        i
            ++;
                    }

                }

                calc(SPACE, 
            0);

                printf(
            "%d\n", pre[SPACE][K]);

                
            return 0;
            }


            posted on 2010-04-13 12:19 糯米 閱讀(997) 評論(0)  編輯 收藏 引用 所屬分類: POJ

            亚洲色大成网站WWW久久九九| 国产精品美女久久久m| 久久青草国产手机看片福利盒子| 久久久久久久久66精品片| 久久久久久噜噜精品免费直播 | 99久久伊人精品综合观看| 久久棈精品久久久久久噜噜| 色欲综合久久中文字幕网| 久久久久亚洲AV片无码下载蜜桃| 久久亚洲AV成人无码国产| 亚洲伊人久久精品影院| 久久99精品国产自在现线小黄鸭| 午夜精品久久久久久99热| 久久99精品久久只有精品| 精品久久久噜噜噜久久久| 久久中文字幕一区二区| 国产亚洲色婷婷久久99精品91| 久久天天躁狠狠躁夜夜2020| 国产69精品久久久久观看软件| AV无码久久久久不卡蜜桃| 久久精品国产秦先生| 久久91精品综合国产首页| 亚洲天堂久久久| 久久久精品人妻一区二区三区四| 九九99精品久久久久久| 一级做a爰片久久毛片毛片 | 久久ZYZ资源站无码中文动漫| 日本久久久久久中文字幕| 欧美与黑人午夜性猛交久久久| 国产99久久久国产精品小说| 国产一区二区精品久久| 三级韩国一区久久二区综合 | 久久久久AV综合网成人| 无码8090精品久久一区| 99999久久久久久亚洲| 人妻无码精品久久亚瑟影视| 久久青青草原亚洲av无码app | 亚洲级αV无码毛片久久精品 | 成人午夜精品久久久久久久小说| 国产欧美久久久精品影院| 国产激情久久久久影院|