poj3267--The Cow Lexicon(dp:字符串组合)

时间:2022-09-12 20:43:05
The Cow Lexicon
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 8211   Accepted: 3864

Description

Few know that the cows have their own dictionary with W (1 ≤ W ≤ 600) words, each containing no more 25 of the characters 'a'..'z'. Their cowmunication system, based on mooing, is not
very accurate; sometimes they hear words that do not make any sense. For instance, Bessie once received a message that said "browndcodw". As it turns out, the intended message was "browncow" and the two letter "d"s were noise from other parts of the barnyard.

The cows want you to help them decipher a received message (also containing only characters in the range 'a'..'z') of length L (2 ≤ L ≤ 300) characters that is a bit garbled. In particular,
they know that the message has some extra letters, and they want you to determine the smallest number of letters that must be removed to make the message a sequence of words from the dictionary.

Input

Line 1: Two space-separated integers, respectively: W and L 

Line 2: L characters (followed by a newline, of course): the received message 

Lines 3..W+2: The cows' dictionary, one word per line

Output

Line 1: a single integer that is the smallest number of characters that need to be removed to make the message a sequence of dictionary words.

Sample Input

6 10
browndcodw
cow
milk
white
black
brown
farmer

Sample Output

2

Source

USACO 2007 February Silver
给出一个字符串,问最少去掉几个字符得到的序列是全然由给出的字典组成。字典在以下给出
依据问题。能够想到最后得到的字符串是字典组成的,那么组成这个字符串的单词在一開始就分散在给出的串中,我们要找的就是推断单词在字符串的位置。
dp[i]表示从头開始到第i个字符最少要消除多少个字符,
首先dp[0] = 1 ;
dp[i] = dp[i-1] , 匹配不到
dp[i] = dp[j] + k 出现字符串能够匹配到从j+1到i的字符串中,k = 从j+1到i完毕匹配须要消除的字符。
一開始用最长公共子序列写,后来发现,在对dp[i]寻找从0到i有没有单词能够匹配的时候。要求,单词的最后一个单词一定和s[i]同样。不然那个单词在之前就已经匹配过了。
所以仅仅要用普通的遍历就能够了。
PS:对于不知道開始或结束的位置的字符串判字串,用最长公共子序列,假设知道一个确定的位置,直接匹配。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct node
{
int l ;
char s[30] ;
} p[700];
int dp[400];
char s[400] ;
int cmp(node a,node b)
{
return a.l < b.l ;
}
int main()
{
int i , j , n , l ;
while( scanf("%d %d", &n, &l)!=EOF)
{
scanf("%s", s);
for(i = 0 ; i < n ; i++)
{
scanf("%s", p[i].s);
p[i].l = strlen(p[i].s);
}
sort(p,p+n,cmp);
memset(dp,0,sizeof(dp));
dp[0] = 1 ;
for(i = 0 ; i < l ; i++)
{
if(i)
dp[i] = dp[i-1]+1 ;
for( j = 0 ; p[j].l <= i+1 ; j++)
{
int k1 = i , k2 = p[j].l-1 ;
if( s[k1] != p[j].s[k2] ) continue ;
while( k1 >= 0 && k2 >= 0 )
{
if( s[k1] == p[j].s[k2] )
{
k1-- ;
k2-- ;
}
else
k1-- ;
}
if( k2 == -1 )
{
dp[i] = min( dp[i],dp[k1]+i-k1-p[j].l );
}
}
}
printf("%d\n", dp[l-1]);
}
return 0;
}

poj3267--The Cow Lexicon(dp:字符串组合)的更多相关文章

  1. POJ3267 The Cow Lexicon&lpar;DP&plus;删词&rpar;

    The Cow Lexicon Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9041   Accepted: 4293 D ...

  2. POJ3267 The Cow Lexicon&lpar;dp&rpar;

    题目链接. 分析: dp[i]表示母串从第i位起始的后缀所对应的最少去掉字母数. dp[i] = min(dp[i+res]+res-strlen(pa[j])); 其中res 为从第 i 位开始匹配 ...

  3. POJ3267——The Cow Lexicon&lpar;动态规划&rpar;

    The Cow Lexicon DescriptionFew know that the cows have their own dictionary with W (1 ≤ W ≤ 600) wor ...

  4. POJ 3267-The Cow Lexicon&lpar;DP&rpar;

    The Cow Lexicon Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8252   Accepted: 3888 D ...

  5. USACO 2007 February Silver The Cow Lexicon &sol;&sol;&sol; DP oj24258

    题目大意: 输入w,l: w是接下来的字典内的单词个数,l为目标字符串长度 输入目标字符串 接下来w行,输入字典内的各个单词 输出目标字符串最少删除多少个字母就能变成只由字典内的单词组成的字符串 Sa ...

  6. The Cow Lexicon&lpar;dp&rpar;

    Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7290   Accepted: 3409 Description Few k ...

  7. POJ 3267:The Cow Lexicon(DP)

    http://poj.org/problem?id=3267 The Cow Lexicon Time Limit: 2000MS   Memory Limit: 65536K Total Submi ...

  8. POJ 3267:The Cow Lexicon 字符串匹配dp

    The Cow Lexicon Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8905   Accepted: 4228 D ...

  9. BZOJ 1633&colon; &lbrack;Usaco2007 Feb&rsqb;The Cow Lexicon 牛的词典

    题目 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 401  Solv ...

随机推荐

  1. 初识nginx之第一个demo

    商城项目做了一个多月了,想到必须用到负载均衡,简单了解了一下nginx,首先分享第一个demo,五月份上线后,会继续分享一系列相关知识. 在nginx根目录下,用了一个园友的批处理文件nginx.ba ...

  2. CodeForces 742A Arpa’s hard exam and Mehrdad’s naive cheat

    题意:求1378 n次幂的最后一位. 析:两种方法,第一种,就是快速幂,第二种找循环节,也很好找,求一下前几个数就好. 代码如下: #pragma comment(linker, "/STA ...

  3. 使用jqgrid的C&num;&sol;asp&period;net mvc开发者的福音 jqgrid-asp&period;net-mvc

    你是否使用jqgrid? 你是否想在C#/asp.net mvc中使用jqgrid? 那你很可能曾经为了分析jqgrid的request url用fiddler忙活了2个小时.(如果你要使用jqgri ...

  4. hdu 5585 Numbers

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5585 思路:对于2和5只须看最后一位数,对于三看所有位的数字之和就行 #include<stdi ...

  5. 文本主题模型之LDA&lpar;一&rpar; LDA基础

    文本主题模型之LDA(一) LDA基础 文本主题模型之LDA(二) LDA求解之Gibbs采样算法 文本主题模型之LDA(三) LDA求解之变分推断EM算法(TODO) 在前面我们讲到了基于矩阵分解的 ...

  6. SQLite中的WAL机制详细介绍-与回滚日志原理

    一.什么是WAL? WAL的全称是Write Ahead Logging,它是很多数据库中用于实现原子事务的一种机制,SQLite在3.7.0版本引入了该特性. 二.WAL如何工作? 在引入WAL机制 ...

  7. redis CentOS6&period;5安装及集群部署

    .下载redis source包 链接:https://pan.baidu.com/s/122ZCjNvjl9Jx6M2YsLrncw 密码:92ze 2.解压 tar -xzf redis-3.2. ...

  8. Bootstrap Modal 使用remote从远程加载内容

        Bootstrap的Modal这个模态窗组件还是很好用的,但在开发的过程中模态窗中的内容大部分都是从后端加载的.要实现模态窗的内容是从后端加载话,常用的实现方式有2种.它们是:     (1) ...

  9. 《算法》第四章部分程序 part 2

    ▶ 书中第四章部分程序,加上自己补充的代码,随机生成各类无向图 ● 随机生成无向图 package package01; import edu.princeton.cs.algs4.StdOut; i ...

  10. springmvc简单教程

    IDEA建立Spring MVC Hello World 详细入门教程(转自)   引子,其实从.NET转Java已经有几个月时间了,项目也做了不少,但是很多配置都是根据公司模板或者网上教程比忽略画瓢 ...