青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

poj 3691 DNA repair AC自動機 + dp

   題意是給定一系列模式串。然后給出一個文本串,問至少改變文本串里面多少個字符
可以使文本串不包含任何一個模式串。
   還是先建立Trie圖,然后在Trie圖上面進行dp。dp的思路也不是很復雜。dp[i][j]的意思
是長度為i的文本串需要改變dp[i][j]個字符順利到達狀態j。需要注意的是長度為i的時候,
對應的字符串中的第i-1個字符。剛開始一直沒發現這個bug。而且注意中途不能轉移到
匹配成功的狀態上去,多加幾個條件控制即可了。。。
   轉移方程,dp[i][j] = min(dp[i][j], dp[i-1][nNext] + szText[i-1] != k),其中nNext
是從狀態j可以轉移到的非匹配成功的狀態,k代表的當前邊的權。
   
   代碼如下:
#include <stdio.h>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;

const int MAX_N = 61;
const int MAX_L = 31;
const int MAX_D = 4;
const int INF = 1110;
char chHash[256];
char szPat[MAX_L];

void InitHash()
{
    chHash['A'] = 0;
    chHash['G'] = 1;
    chHash['C'] = 2;
    chHash['T'] = 3;
}

struct Trie
{
    Trie* fail;
    Trie* next[MAX_D];
    bool flag;
    int no;
};
int nP;
Trie* pRoot;
Trie tries[MAX_N * MAX_L];

Trie* NewNode()
{
    memset(&tries[nP], 0, sizeof(Trie));
    tries[nP].no = nP;
    return &tries[nP++];
}

void InitTrie(Trie*& pRoot)
{
    nP = 0;
    pRoot = NewNode();
}

void Insert(Trie* pRoot, char* pszPat)
{
    Trie* pNode = pRoot;
    while (*pszPat)
    {
        int idx = chHash[*pszPat];
        if (pNode->next[idx] == NULL)
        {
            pNode->next[idx] = NewNode();
        }
        pNode = pNode->next[idx];
        ++pszPat;
    }
    pNode->flag = true;
}

void BuildAC(Trie* pRoot)
{
    pRoot->fail = NULL;
    queue<Trie*> qt;
    qt.push(pRoot);

    while (!qt.empty())
    {
        Trie* front = qt.front();
        qt.pop();

        for (int i = 0; i < MAX_D; ++i)
        {
            if (front->next[i])
            {
                Trie* pNode = front->fail;
                while (pNode && pNode->next[i] == NULL)
                {
                    pNode = pNode->fail;
                }
                front->next[i]->fail = pNode? pNode->next[i] : pRoot;
                front->next[i]->flag |= front->next[i]->fail->flag;
                qt.push(front->next[i]);
            }
            else
            {
                front->next[i] = front == pRoot? pRoot : front->fail->next[i];
            }
        }
    }
}

int nChange[INF][INF];
char szText[INF];

int Solve()
{
    int nLen = strlen(szText);
    for (int i = 0; i <= nLen; ++i)
    {
        for (int j = 0; j < nP; ++j)
        {
            nChange[i][j] = INF;
        }
    }

    int i, j, k;
    nChange[0][0] = 0;
    for (i = 1; i <= nLen; ++i)
    {
        for (j = 0; j < nP; ++j)
        {
            if (tries[j].flag) continue;
            if (nChange[i - 1][j] == INF) continue;
            for (k = 0; k < MAX_D; ++k)
            {
                int nNext = tries[j].next[k] - tries;
                if (tries[nNext].flag) continue;
                //trie是邊權樹,所以i是從1到len,而且當前字符是szText[i-1]
                int nTemp = nChange[i - 1][j] + (k != chHash[szText[i - 1]]);
                nChange[i][nNext] = min(nChange[i][nNext], nTemp);
            }
        }
    }

    int nAns = INF;
    for (i = 0; i < nP; ++i)
    {
        if (!tries[i].flag)
        nAns = min(nAns, nChange[nLen][i]);
    }
    return nAns == INF? -1 : nAns;
}

int main()
{
    int nN;
    int nCase = 1;

    InitHash();
    while (scanf("%d", &nN), nN)
    {
        InitTrie(pRoot);
        while (nN--)
        {
            scanf("%s", szPat);
            Insert(pRoot, szPat);
        }
        BuildAC(pRoot);
        scanf("%s", szText);
        printf("Case %d: %d\n", nCase++, Solve());
    }

    return 0;
}

posted on 2012-10-21 16:53 yx 閱讀(572) 評論(0)  編輯 收藏 引用 所屬分類: 字符串

<2012年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

導航

統計

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學

網友

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            蜜桃av一区| 欧美激情片在线观看| av不卡在线| 亚洲乱码国产乱码精品精| 欧美日韩国产二区| av成人手机在线| 狂野欧美激情性xxxx| 亚洲精品美女久久7777777| 欧美性jizz18性欧美| 久久精品亚洲乱码伦伦中文| 亚洲乱码国产乱码精品精| 久久久成人网| 亚洲主播在线播放| 99xxxx成人网| 欧美一区二区性| 久久人91精品久久久久久不卡| 在线看片日韩| 媚黑女一区二区| 麻豆精品精华液| 欧美国产精品v| 久久av在线| 一区二区三区|亚洲午夜| 欧美成人四级电影| 久久不射2019中文字幕| 亚洲欧美美女| 亚洲乱码视频| 亚洲视频二区| 亚洲日韩欧美视频一区| 日韩一级在线| 最新国产成人在线观看| 国产一区自拍视频| 国产欧美 在线欧美| 欧美日韩免费观看一区三区| 可以看av的网站久久看| 久久精品视频在线看| 免费在线看成人av| 久热精品视频在线观看一区| 欧美成人自拍| 欧美日本一道本| 欧美午夜无遮挡| 在线看视频不卡| 亚洲人成在线观看一区二区| 亚洲尤物精选| 亚洲高清在线视频| 欧美jizz19性欧美| 欧美日韩亚洲91| 韩国av一区| 精久久久久久久久久久| 国产一区 二区 三区一级| 国产精品qvod| 亚洲日韩第九十九页| 久久久久久久久久久一区 | 欧美成人国产va精品日本一级| 久久激情视频免费观看| 欧美一区二区三区四区视频| 亚洲图片欧洲图片av| 久久美女性网| 午夜精品久久久| 欧美在线视频观看| 国产精品久久久久9999| 国内精品伊人久久久久av影院| 亚洲午夜电影在线观看| 久久精品国语| 亚洲午夜久久久久久久久电影网| 亚洲视频导航| 欧美黄色小视频| 国产精品porn| 亚洲专区免费| 亚洲一区图片| 欧美黄色视屏| 9色porny自拍视频一区二区| 午夜久久久久久| 欧美激情一区二区三区蜜桃视频| 久久九九免费视频| 亚洲国产精品久久久久久女王| 99re6这里只有精品视频在线观看| 美女91精品| 亚洲一区二区三区视频| 国产伦精品一区二区三区免费| 亚洲国产欧美另类丝袜| 亚洲午夜久久久久久久久电影院| 亚洲精品日产精品乱码不卡| 欧美特黄一级| 精品成人免费| 亚洲国产精品久久| 午夜欧美不卡精品aaaaa| 免费久久精品视频| 亚洲精品在线观| 亚洲视频精品在线| 精品成人在线视频| 亚洲国产美女精品久久久久∴| 欧美乱大交xxxxx| 亚洲免费在线播放| 久久九九99视频| 中国av一区| 久久国产88| 国产一区二区中文| 亚洲国产经典视频| 国产精品黄色| 欧美成人四级电影| 国产精品一区二区三区观看| 欧美激情一区在线观看| 国产精品高潮视频| 亚洲成人在线免费| 伊人春色精品| 久久国产精品久久精品国产| 久久大逼视频| 一本久久综合| 久久大综合网| 亚洲欧美日韩区| 欧美成人高清视频| 欧美一区二区三区精品| 欧美全黄视频| 亚洲第一区在线观看| 国产欧美1区2区3区| 99国产精品久久久久老师| 激情综合久久| 亚洲欧美日韩国产成人| 亚洲图片在线| 美国成人直播| 久久久久久尹人网香蕉| 麻豆成人在线| 欧美精品久久久久久久久老牛影院| 国产久一道中文一区| 91久久在线播放| 欧美美女bb生活片| 女女同性精品视频| 国产亚洲成人一区| 免费观看成人www动漫视频| 国产精品一区二区在线观看不卡| 亚洲激情电影在线| 亚洲国产日韩欧美综合久久| 欧美影视一区| 久久久久久久综合色一本| 国产精品毛片va一区二区三区| 午夜激情久久久| 欧美午夜在线视频| 一本色道久久综合亚洲精品小说| 亚洲国产精品999| 玖玖综合伊人| 亚洲韩国日本中文字幕| 亚洲蜜桃精久久久久久久| 欧美国产日韩xxxxx| 亚洲精品在线看| 亚洲午夜久久久久久久久电影网| 欧美日韩国产精品专区| av成人激情| 羞羞漫画18久久大片| 免费人成精品欧美精品| 老司机亚洲精品| 亚洲福利在线看| 欧美激情综合网| 亚洲一级黄色av| 久久夜色精品一区| 欧美日韩一区成人| 一区二区三区波多野结衣在线观看| 一本久道久久综合狠狠爱| 欧美日韩一二区| 欧美一区二区三区视频免费| 老司机午夜精品视频在线观看| 亚洲国产综合视频在线观看| 欧美韩日亚洲| 中日韩男男gay无套| 久久精品91| 在线精品视频一区二区| 欧美成黄导航| 亚洲在线观看| 欧美ab在线视频| 亚洲影院在线| 亚洲国内在线| 国产精品青草久久| 亚洲人在线视频| 亚洲国内精品| 欧美午夜视频| 久色婷婷小香蕉久久| 一区二区高清| 欧美第十八页| 欧美在线免费视频| 日韩亚洲欧美成人| 国产一区日韩二区欧美三区| 欧美电影免费观看高清完整版| 国产精品99久久久久久久久久久久 | 久久久97精品| 日韩视频免费观看高清在线视频 | 亚洲激情在线播放| 亚洲图片在线观看| 精品成人在线观看| 欧美日韩中文字幕在线| 久久久福利视频| 亚洲视频二区| 亚洲精品欧美一区二区三区| 国产欧美日韩中文字幕在线| 一本久道久久综合中文字幕| 国产亚洲一区二区精品| 欧美大片免费观看在线观看网站推荐| 99国产精品久久久久久久| 久久综合综合久久综合| 亚洲欧美国产精品va在线观看 | 国产伦精品一区| 欧美日韩一区在线播放|