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

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 閱讀(577) 評論(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>
            99人久久精品视频最新地址| 亚洲无限av看| 久久久综合香蕉尹人综合网| 好看的亚洲午夜视频在线| 久久精品91久久香蕉加勒比| 欧美专区第一页| 亚洲大胆人体在线| 亚洲电影第1页| 欧美成人性网| 亚洲一区二区三区四区在线观看| 亚洲天堂成人在线观看| 国产欧美日韩高清| 欧美大尺度在线观看| 欧美激情第4页| 性伦欧美刺激片在线观看| 欧美一区精品| 亚洲精品视频免费在线观看| 一区二区三区日韩| 国产在线拍偷自揄拍精品| 欧美风情在线观看| 国产精品www994| 久久综合伊人77777尤物| 欧美不卡高清| 欧美在线一级va免费观看| 久久综合久久综合这里只有精品| 亚洲日本欧美| 香蕉久久夜色| 亚洲最新色图| 久久成人亚洲| 亚洲视频1区| 久久免费高清视频| 亚洲欧美日韩国产成人| 蜜臀av在线播放一区二区三区| 亚洲私拍自拍| 免费一级欧美片在线观看| 亚洲欧美日韩在线| 欧美大片一区二区三区| 久久久久一本一区二区青青蜜月| 欧美日本不卡高清| 女人色偷偷aa久久天堂| 国产精品羞羞答答| 亚洲精品乱码久久久久久日本蜜臀| 国产精品www网站| 欧美高清不卡| 国外成人网址| 午夜欧美大片免费观看 | 欧美呦呦网站| 一区二区不卡在线视频 午夜欧美不卡在 | 激情成人av在线| 9色精品在线| 亚洲日本欧美日韩高观看| 欧美在线视频免费| 欧美一区91| 国产精品theporn| 亚洲日本激情| 含羞草久久爱69一区| 亚洲欧美日韩高清| 亚洲影院色在线观看免费| 欧美精品一区二区三区四区| 亚洲国产成人不卡| 亚洲国产一区二区三区在线播| 久久精品道一区二区三区| 久久精品国产久精国产爱| 国产欧美日韩视频| 亚洲欧美日韩在线一区| 香蕉精品999视频一区二区| 国产精品白丝av嫩草影院| 亚洲免费不卡| 亚洲欧美激情在线视频| 国产精品久久一区主播| 中文网丁香综合网| 午夜久久99| 国产伦精品一区二区三区高清| 亚洲天堂av在线免费观看| 午夜免费久久久久| 国产亚洲福利一区| 久久精品国产亚洲精品| 久久综合久久久久88| 在线日韩日本国产亚洲| 久久久久久有精品国产| 欧美电影在线免费观看网站| 亚洲精品麻豆| 欧美性天天影院| 欧美一二三区在线观看| 男女视频一区二区| 亚洲免费大片| 欧美视频免费| 久久精品一级爱片| 亚洲福利视频一区| 亚洲在线免费视频| 国产一区二区三区免费观看| 麻豆精品一区二区综合av| 亚洲精品网址在线观看| 午夜在线精品偷拍| 亚洲国产精品福利| 欧美性天天影院| 久久九九久精品国产免费直播 | 亚洲一区二区3| 国产欧美一区二区精品忘忧草 | 久久岛国电影| 亚洲欧洲三级| 久久国产日韩| 亚洲免费激情| 国产午夜亚洲精品羞羞网站| 免费人成精品欧美精品| 亚洲欧美日韩综合国产aⅴ| 欧美成年人视频网站| 午夜精品久久久久久久男人的天堂| 狠狠色狠狠色综合日日五| 欧美日韩精品在线| 久久久人成影片一区二区三区观看| 亚洲精品免费一二三区| 久久久亚洲成人| 亚洲在线视频网站| 日韩视频久久| 黄色成人av在线| 国产精品久久7| 欧美国产一区二区三区激情无套| 亚洲在线成人| 日韩系列欧美系列| 亚洲第一网站免费视频| 久久夜色撩人精品| 久久国产高清| 亚洲欧美国产日韩天堂区| 99ri日韩精品视频| 亚洲青涩在线| 一区免费视频| 国产视频在线观看一区| 国产精品高清在线| 欧美三区不卡| 欧美日精品一区视频| 欧美黄色aa电影| 欧美成人免费在线| 麻豆亚洲精品| 欧美成人久久| 免费欧美网站| 欧美成人免费在线| 欧美黑人多人双交| 欧美精品一区二区三区久久久竹菊 | 亚洲午夜精品久久久久久浪潮 | 亚洲少妇自拍| 亚洲精品专区| 日韩西西人体444www| 91久久久久久久久| 亚洲激情综合| 亚洲国产精品女人久久久| 国内一区二区在线视频观看| 国产日韩亚洲欧美精品| 国产精品丝袜久久久久久app| 欧美午夜电影在线| 欧美色播在线播放| 欧美性色aⅴ视频一区日韩精品| 欧美日韩免费观看一区二区三区| 欧美激情一区| 欧美日韩日本网| 欧美图区在线视频| 国产精品影视天天线| 国产色产综合产在线视频| 国产视频观看一区| 精品9999| 99热这里只有成人精品国产| 亚洲私人影吧| 久久xxxx| 欧美电影在线观看| 亚洲蜜桃精久久久久久久| 亚洲天堂av高清| 久久黄色级2电影| 欧美中文字幕| 欧美激情久久久久| 国产精品免费看| 激情久久久久| av不卡在线| 久久久国产精品一区| 亚洲国产另类精品专区| 亚洲午夜极品| 久久精品国产久精国产爱| 欧美高清在线精品一区| 国产精品久久中文| 亚洲国产成人精品女人久久久| 亚洲视频在线观看| 久久久亚洲精品一区二区三区 | 榴莲视频成人在线观看| 亚洲国产网站| 欧美一区二区三区精品电影| 欧美韩日高清| 极品av少妇一区二区| 亚洲午夜电影在线观看| 你懂的成人av| 亚洲一区二区三区三| 久久人人九九| 国产欧美精品国产国产专区| 亚洲精品人人| 久久久一区二区三区| 日韩一二在线观看| 久久婷婷国产综合国色天香| 国产精品入口| 亚洲一二三四久久| 亚洲国产成人tv| 久久午夜羞羞影院免费观看| 国产精品爽黄69|