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

            堅信:勤能補拙

            PKU 1159 Palindrome

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

            思路:
            看完題目,完全不知道該怎么做
            參考discuss,發(fā)現(xiàn)原來DP這么這么地強大,自己那是相當(dāng)菜
            設(shè)ch[1]..ch[n]表示字符串1至n位,i為左游標(biāo),j為右游標(biāo) ,則i從n遞減,j從i開始遞增。
            min[i][j]表示i和j之間至少需要插入多少個字符才能對稱,初始置全0 ,我們最終需要得到的值是min[1][n].
            則
            if(ch[i]==ch[j])                                    //如果兩個游標(biāo)所指字符相同,向中間縮小范圍
                min[i][j]=min[i+1][j-1];
            else
                min[i][j] = 1 +(min[i+1][j]和min[i][j-1]中的較小值);     //如果不同,典型的狀態(tài)轉(zhuǎn)換方程
            額,狀態(tài)方程看明白了,結(jié)果發(fā)現(xiàn)代碼居然不知道怎么寫...那個汗哪...
            原因是沒有發(fā)現(xiàn)當(dāng)i>j時,min[i][j] = 0

            代碼(記憶化搜索):
             1 /* Time: 1594MS */
             2 #include<stdio.h>
             3 #include<stdlib.h>
             4 #include<string.h>
             5 #define MAX_LEN 5001
             6 char str[MAX_LEN+1];
             7 int len;
             8 short memory[MAX_LEN][MAX_LEN];
             9 
            10 /*
            11  * f[i][j] represent the minimal insert for str[i..j]
            12  *
            13  * f[i][j] = f[i+1][j-1], if str[i]==str[j], otherwise
            14  * f[i][j] = min(f[i+1][j], f[i][j-1]) + 1
            15  */
            16 int
            17 func(int i, int j)
            18 {
            19     int a, b;
            20     if(i >= j)
            21         return 0;
            22     if(memory[i][j])
            23         return memory[i][j];
            24     if(str[i] == str[j])
            25         memory[i][j] = func(i+1, j-1);
            26     else {
            27         a = func(i+1, j);
            28         b = func(i, j-1);
            29         memory[i][j] = a<? a+1 : b+1;
            30     }
            31     return memory[i][j];
            32 }
            33 
            34 int
            35 main(int argc, char **argv)
            36 {
            37     while(scanf("%d"&len) != EOF) {
            38         memset(memory, 0sizeof(memory));
            39         scanf("%s", str+1);
            40         printf("%d\n", func(1, len));
            41     }
            42 }

            代碼(dp):
             1 #include<stdio.h>
             2 #include<stdlib.h>
             3 #include<string.h>
             4 #define MAX_LEN 5001
             5 char str[MAX_LEN];
             6 int len;
             7 short table[MAX_LEN][MAX_LEN];
             8 
             9 short
            10 dp()
            11 {
            12     int i, j;
            13     /* if i>j, then table[i][j] = 0 */
            14     for(i=len-1; i>=1; i--) {
            15         for(j=i; j<=len; j++) {
            16             if(str[i] == str[j])
            17                 table[i][j] = table[i+1][j-1];
            18             else
            19                 table[i][j] = table[i+1][j]<table[i][j-1? table[i+1][j]+1 : table[i][j-1]+1;
            20         }
            21     }
            22     return table[1][len];
            23 }
            24 
            25 int
            26 main(int argc, char **argv)
            27 {
            28     while(scanf("%d"&len) != EOF) {
            29         memset(table, 0sizeof(table));
            30         scanf("%s", str+1);
            31         printf("%d\n", dp());
            32     }
            33 }

            posted on 2010-08-12 19:47 simplyzhao 閱讀(168) 評論(0)  編輯 收藏 引用 所屬分類: C_動態(tài)規(guī)劃

            導(dǎo)航

            <2010年9月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            欧美精品乱码99久久蜜桃| 88久久精品无码一区二区毛片 | 国产巨作麻豆欧美亚洲综合久久 | 性做久久久久久久| 久久精品无码午夜福利理论片| 91秦先生久久久久久久| 欧美午夜A∨大片久久 | 人妻无码αv中文字幕久久琪琪布| 国产精品久久久久天天影视| 午夜精品久久久久久中宇| 色综合久久精品中文字幕首页| 亚洲人成无码网站久久99热国产| 精品国产乱码久久久久久郑州公司 | 人妻丰满AV无码久久不卡| 国产精品成人久久久久久久| 亚洲色大成网站WWW久久九九| 国产AV影片久久久久久| 久久精品国产亚洲AV电影 | 88久久精品无码一区二区毛片 | 亚洲国产精品无码久久九九| 久久福利青草精品资源站| 亚洲精品乱码久久久久久| 久久久久国产| 久久精品国产99国产精品| 久久免费线看线看| 久久不射电影网| 久久99精品国产麻豆 | 天天久久狠狠色综合| 久久影院综合精品| 一本久久知道综合久久| 伊人久久大香线蕉精品不卡| 欧美成a人片免费看久久| 国产精品久久久久久久久久免费| 久久美女人爽女人爽| 久久久久久综合一区中文字幕| 97久久国产综合精品女不卡| 国产精品久久久久蜜芽| 久久久噜噜噜久久中文字幕色伊伊 | 91精品免费久久久久久久久| 国产精品久久久久久吹潮| 久久久国产精品亚洲一区|