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

2024-08-25 01:18

本文主要是介绍poj3267--The Cow Lexicon(dp:字符串组合),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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:字符串组合)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104143

相关文章

MySQL字符串转数值的方法全解析

《MySQL字符串转数值的方法全解析》在MySQL开发中,字符串与数值的转换是高频操作,本文从隐式转换原理、显式转换方法、典型场景案例、风险防控四个维度系统梳理,助您精准掌握这一核心技能,需要的朋友可... 目录一、隐式转换:自动但需警惕的&ld编程quo;双刃剑”二、显式转换:三大核心方法详解三、典型场景

Java中的随机数生成案例从范围字符串到动态区间应用

《Java中的随机数生成案例从范围字符串到动态区间应用》本文介绍了在Java中生成随机数的多种方法,并通过两个案例解析如何根据业务需求生成特定范围的随机数,本文通过两个实际案例详细介绍如何在java中... 目录Java中的随机数生成:从范围字符串到动态区间应用引言目录1. Java中的随机数生成基础基本随

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Java 字符串操作之contains 和 substring 方法最佳实践与常见问题

《Java字符串操作之contains和substring方法最佳实践与常见问题》本文给大家详细介绍Java字符串操作之contains和substring方法最佳实践与常见问题,本文结合实例... 目录一、contains 方法详解1. 方法定义与语法2. 底层实现原理3. 使用示例4. 注意事项二、su

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1