您的位置:首页 > 其它

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

2017-04-30 16:04 417 查看
题意:给你一个长的字符串,然后在给你几个短的字符,需要从长字符串中减去几个字符之后,那几个短字符串才能组成一个长字符串(短字符串不一定全部用到)

解题思路:定义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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: