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

            堅(jiān)信:勤能補(bǔ)拙

            PKU 1179 Polygon

            問題:
            http://acm.pku.edu.cn/JudgeOnline/problem?id=1179

            思路:
            這題輸在了對(duì)原題目的理解和分析上,沒能成功地走出第一步:
                                                                  將原題解析成對(duì)于表達(dá)式的求解
            把缺了一條邊的多邊形展開成直線就是一個(gè)表達(dá)式
            注意:為了求乘法,必須同時(shí)保存最大值和最小值

            f[i][j]記錄表達(dá)式中從頂點(diǎn)i到頂點(diǎn)j這段子表達(dá)式的值

            動(dòng)態(tài)規(guī)劃的思想類似于矩陣連乘

            參考:
            http://hi.baidu.com/xiehuixb/blog/item/575ec81e221466c1a786699e.html

            代碼:
             1 #include<stdio.h>
             2 #include<stdlib.h>
             3 #include<string.h>
             4 #define MAX_LEN 51
             5 #define INF 9223372036854775807LL
             6 #define maximal(a, b) ((a)>(b) ? (a) : (b))
             7 #define minimal(a, b) ((a)<(b) ? (a) : (b))
             8 char operand[MAX_LEN][2];
             9 int operators[MAX_LEN];
            10 int n, ans_len, ans[MAX_LEN];
            11 long long int rt, max[MAX_LEN][MAX_LEN], min[MAX_LEN][MAX_LEN];
            12 
            13 /*
            14  * when it comes to: '+'
            15  * max[i][j] = maximal(max[i][k] + max[k+1][j])
            16  * min[i][j] = minimal(min[i][k] + min[k+1][j])
            17  *
            18  * when it comes to: '*'
            19  * max[i][j] = maximal(max[i][k]*max[k+1][j], max[i][k]*min[k+1][j], min[i][k]*max[k+1][j], min[i][k]*min[k+1][j])
            20  * min[i][j] = minimal(max[i][k]*max[k+1][j], max[i][k]*min[k+1][j], min[i][k]*max[k+1][j], min[i][k]*min[k+1][j])
            21  *
            22  * i<=k<j
            23  */
            24 void
            25 solve(char *opd, int *ops, int del_edge)
            26 {
            27     int i, j, k, len;
            28     for(i=1; i<=n; i++)
            29         max[i][i] = min[i][i] = ops[i];
            30     for(len=2; len<=n; len++) {
            31         for(i=1; i<=n-len+1; i++) {
            32             j = i+len-1;
            33             max[i][j] = -INF;
            34             min[i][j] = INF;
            35             for(k=i; k<j; k++) {
            36                 if(opd[k] == 't') {
            37                     max[i][j] = maximal(max[i][j], max[i][k]+max[k+1][j]);
            38                     min[i][j] = minimal(min[i][j], min[i][k]+min[k+1][j]);
            39                 } else { /* opd[k] == 'x' */
            40                     max[i][j] = maximal(max[i][j], max[i][k]*max[k+1][j]);
            41                     max[i][j] = maximal(max[i][j], max[i][k]*min[k+1][j]);
            42                     max[i][j] = maximal(max[i][j], min[i][k]*max[k+1][j]);
            43                     max[i][j] = maximal(max[i][j], min[i][k]*min[k+1][j]);
            44 
            45                     min[i][j] = minimal(min[i][j], max[i][k]*max[k+1][j]);
            46                     min[i][j] = minimal(min[i][j], max[i][k]*min[k+1][j]);
            47                     min[i][j] = minimal(min[i][j], min[i][k]*max[k+1][j]);
            48                     min[i][j] = minimal(min[i][j], min[i][k]*min[k+1][j]);
            49                 }
            50             }
            51         }
            52     }
            53     if(max[1][n] >= rt) {
            54         if(max[1][n] == rt)
            55             ans[ans_len++= del_edge;
            56         else {
            57             rt = max[1][n];
            58             ans_len = 0;
            59             ans[ans_len++= del_edge;
            60         }
            61     }
            62 }
            63 
            64 int
            65 main(int argc, char **argv)
            66 {
            67     int i, j, k;
            68     char tmpopd[MAX_LEN];
            69     int tmpops[MAX_LEN];
            70     while(scanf("%d"&n) != EOF) {
            71         for(i=1; i<=n; i++)
            72             scanf("%s%d", operand[i], operators+i);
            73         rt = -INF;
            74         ans_len = 0;
            75         for(i=1; i<=n; i++) {
            76             for(j=i%n+1, k=1; j!=i; j=j%n+1, k++)
            77                 tmpopd[k] = operand[j][0];
            78             tmpopd[k] = '\0';
            79             tmpops[1= operators[i];
            80             for(j=i%n+1, k=2; j!=i; j=j%n+1, k++)
            81                 tmpops[k] = operators[j];
            82             solve(tmpopd, tmpops, i);
            83         }
            84         printf("%lld\n", rt);
            85         for(i=0; i<ans_len; i++)
            86             printf("%d ", ans[i]);
            87         printf("\n");
            88     }
            89 }

            posted on 2010-08-17 13:51 simplyzhao 閱讀(148) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C_動(dòng)態(tài)規(guī)劃

            導(dǎo)航

            <2010年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統(tǒng)計(jì)

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            99久久无码一区人妻a黑| 国产精品欧美亚洲韩国日本久久| 日韩欧美亚洲综合久久| 欧美va久久久噜噜噜久久| 很黄很污的网站久久mimi色| 大香伊人久久精品一区二区| 国产精品青草久久久久婷婷 | 99久久国产亚洲综合精品| 亚洲精品无码专区久久久| 国产亚州精品女人久久久久久 | 久久福利片| 久久久久久亚洲AV无码专区| 亚洲人成网站999久久久综合 | 国产高清美女一级a毛片久久w| 色综合久久久久综合体桃花网| 久久亚洲天堂| 国产精品狼人久久久久影院 | 久久国产一区二区| 亚洲va久久久噜噜噜久久狠狠 | 久久精品亚洲男人的天堂| 国产精品美女久久久m| 伊人久久大香线蕉av一区| 亚洲伊人久久成综合人影院| 欧美激情精品久久久久| 狠狠久久亚洲欧美专区| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 久久久久久夜精品精品免费啦| 久久精品国产免费观看| 午夜精品久久久久久影视riav| 久久人人爽人人澡人人高潮AV | 亚洲午夜久久久久久噜噜噜| 久久久久亚洲av成人网人人软件 | 久久精品国产男包| 精品国产乱码久久久久久人妻 | 国产精品免费久久久久电影网| 99久久国语露脸精品国产| 亚洲αv久久久噜噜噜噜噜| 久久久免费精品re6| 久久久久亚洲AV片无码下载蜜桃| 久久亚洲美女精品国产精品| 国产精品久久久久久一区二区三区|