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

            USACO 2.3 Longest Prefix


            Trie樹(shù)+簡(jiǎn)單DP

            對(duì)所有的primitives建一個(gè)Trie樹(shù)。用于查找某字符串是否為primitive。一開(kāi)始的時(shí)候,我圖方便用set來(lái)存儲(chǔ),結(jié)果超時(shí)。后改成trie。
            用dp[i]來(lái)保存從i開(kāi)始的子串的最大prefix數(shù)。
            這樣如果字符串buf[i..j]是primitive,且dp[i+j]+j>dp[i],那更新。由于primitive最長(zhǎng)為10。只需看前十個(gè)字符即可。
            時(shí)間復(fù)雜度為O(10*10*n)。
            ps.這題的輸入有點(diǎn)麻煩

            #include?<iostream>
            #include?
            <fstream>
            #include?
            <sstream>
            #include?
            <set>

            using?namespace?std;

            struct?trie_node{
            ????trie_node
            *?next[26];
            ????
            bool?is_terminal;
            ????trie_node(){
            ????????memset(next,
            0,sizeof(next));
            ????????is_terminal?
            =?false;
            ????}
            };

            void?insert_str(trie_node*root,const?char*str,int?len)
            {
            ????trie_node?
            *?cur=root;

            ????
            for(int?i=0;i<len;++i){
            ????????
            if(?cur->next[str[i]-'A']==NULL){
            ????????????cur
            ->next[str[i]-'A']?=?new?trie_node;
            ????????}
            ????????cur?
            =?cur->next[str[i]-'A'];?
            ????}

            ????cur
            ->is_terminal?=?true;
            }

            bool?find_str(trie_node*root,const?char?*str,int?len)
            {
            ????trie_node?
            *?cur?=?root;

            ????
            for(int?i=0;i<len;++i){
            ????????
            if(?cur->next[str[i]-'A']?==?NULL?)
            ????????????
            return?false;
            ????????
            else?
            ????????????cur?
            =?cur->next[str[i]-'A'];
            ????}

            ????
            if(cur->is_terminal)?
            ????????
            return?true;
            ????
            else
            ????????
            return?false;
            }

            char?buf[200000];
            int?dp[2000001];
            int?buf_len;
            trie_node?root;

            void?input()
            {
            ????freopen(
            "prefix.in","r",stdin);
            ????freopen(
            "prefix.out","w",stdout);

            ????
            while(scanf("%s",buf)&&strcmp(buf,".")!=0){
            //????????printf("%s?",buf);
            ??????????insert_str(&root,buf,strlen(buf));
            ????}

            //????printf("\n");

            ????
            int?c;
            ????buf_len
            =0;
            ????
            while(?(c=getchar())!=EOF){
            ????????
            if(!isspace(c)){
            ????????????buf[buf_len
            ++]?=?(char)c;
            //????????????printf("%c",c);
            ????????}
            ????}
            //????printf("%d\n",buf_len);
            }

            void?solve()
            {
            ????input();

            ????dp[buf_len]
            =0;
            ????
            for(int?i=buf_len-1;i>=0;--i){
            ???????
            for(int?j=1;j<=10&&i+j-1<buf_len;++j){
            ???????????
            if(?find_str(&root,&buf[i],j)?)
            ???????????????
            if(dp[i+j]+j>dp[i])
            ???????????????????dp[i]?
            =?dp[i+j]+j;
            ???????}?
            ????}

            ????printf(
            "%d\n",dp[0]);
            }

            int?main(int?argc,char?*argv[])
            {
            ????solve();?
            ????
            return?0;
            }

            posted on 2009-06-23 21:13 YZY 閱讀(1462) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): AlgorithmUSACO動(dòng)態(tài)規(guī)劃

            評(píng)論

            # re: USACO 2.3 Longest Prefix[未登錄](méi) 2013-05-02 22:57 John

            其實(shí)你這樣寫(xiě)的話(huà)用沒(méi)用trie樹(shù)都沒(méi)什么區(qū)別。。。  回復(fù)  更多評(píng)論   

            導(dǎo)航

            <2011年1月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            統(tǒng)計(jì)

            常用鏈接

            留言簿(2)

            隨筆分類(lèi)

            隨筆檔案

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            亚洲午夜久久影院| 伊人久久综合无码成人网| 久久亚洲精品视频| 久久久久亚洲av毛片大| 久久99国产精品久久99小说| 久久精品一本到99热免费| 国产99久久久久久免费看| 亚洲精品乱码久久久久久 | 久久久久这里只有精品 | 国产精品欧美久久久久无广告| 久久99精品久久久久久齐齐| 亚洲精品美女久久久久99| 久久精品亚洲乱码伦伦中文 | 大香伊人久久精品一区二区| 久久精品水蜜桃av综合天堂 | 亚洲欧美成人久久综合中文网 | 国产精品久久久久jk制服| 久久久久一本毛久久久| 嫩草影院久久99| 国产亚洲精品自在久久| 久久久青草青青国产亚洲免观| 国产成人久久精品一区二区三区| 天天影视色香欲综合久久| 国产成人精品久久一区二区三区av | 久久伊人亚洲AV无码网站| 国产精品一区二区久久| 热re99久久精品国99热| 婷婷国产天堂久久综合五月| 久久久精品人妻无码专区不卡| 青青草原综合久久大伊人精品| 久久精品国产亚洲AV无码偷窥| 午夜不卡久久精品无码免费 | 精品久久久无码中文字幕天天| 精品蜜臀久久久久99网站| 无码国内精品久久人妻| 亚洲AV乱码久久精品蜜桃| 久久天天躁狠狠躁夜夜2020一| 三级韩国一区久久二区综合 | 欧美成a人片免费看久久| 久久婷婷人人澡人人| 久久99九九国产免费看小说|