POJ-3267-The Cow Lexicon(简单DP)

来源:互联网 发布:ch341a编程器1.30破解 编辑:程序博客网 时间:2024/06/09 01:07

题意:给你一个长的字符串,然后在给你几个短的字符,需要从长字符串中减去几个字符之后,那几个短字符串才能组成一个长字符串(短字符串不一定全部用到)
解题思路:定义dp[j] 为从j到len 需要减去dp[j] 个字符。

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int dp[305];char mess[305];char dict[605][305];int main(){    int dictN, messL;    while (~scanf("%d%d", &dictN, &messL)) {        memset(dp, 0, sizeof(dp));        scanf("%s", mess);        for (int i = 0; i < dictN; i++) {            scanf("%s", dict[i]);        }        for (int i = messL - 1; i >= 0; i--) {            dp[i] = dp[i + 1] + 1;            for (int j = 0; j < dictN; j++) {                int len = strlen(dict[j]);                if (len <= messL - i && dict[j][0] == mess[i]) {                    int pDict = 1;                    int pMess = i + 1;                    while (pMess < messL) {                        if (mess[pMess] == dict[j][pDict]) {                            pDict++;                        }                        pMess++;                        if (pDict == len) {                            dp[i] = min(dp[i] , dp[pMess] + (pMess - i - len));                            break;                        }                    }                }            }        }        printf("%d\n", dp[0]);    }    return 0;}
0 0
原创粉丝点击