题目大意:

输入w,l; w是接下来的字典内的单词个数,l为目标字符串长度

输入目标字符串

接下来w行,输入字典内的各个单词

输出目标字符串最少删除多少个字母就能变成只由字典内的单词组成的字符串

Sample Input

6 10
browndcodw
cow
milk
white
black
brown
farmer

Sample Output

2

 
当输入为
2 6
reader
rad
reder
输出为
1
即单词不能相互覆盖 只能各自独立组合
#include <algorithm>
#include <cstring>
#include <stdio.h>
#include <string.h>
#include <cstdio>
#include <stdlib.h>
using namespace std;
int main()
{
int w,l;
while(~scanf("%d%d",&w,&l))
{
char ch[],dic[][];
scanf("%s",ch);
for(int i=;i<w;i++)
scanf("%s",dic[i]);
int dp[];
memset(dp,,sizeof(dp));
for(int i=;i<l;i++)
{ // 枚举结尾 再从各个单词尾部开始逐个向前对比
dp[i+]=dp[i]+;
for(int j=;j<w;j++) // 与字典中的各个单词对比
{
int len=strlen(dic[j]);
int p=i,q=len-; // p为主串的指向 q为当前字典单词的指向
while(p>=&&q>=) /// 向前推至 单词匹配完 或 到达主串的开头
{
if(dic[j][q]==ch[p])
q--,p--; // 若可匹配 指向p q均前移
else p--; // 若不可 则主串指向p前移
}
if(q<) dp[i+]=min(dp[i+],dp[p+]+i-p-len);
/// q<0 说明当前单词在主串具有匹配串 所以指向走到了0之前 /// i-p 为主串指向的移动长度 len 为单词长度
/// 差值 i-p-len 即为当前匹配串需删掉的字母个数 /* 两者取小
dp[i] + 1
前i位最少删除个数 + 删除当前位 dp[p+1] + i-p-len
(不含当前匹配串的)前p位最少删除个数 + (p之后的)当前匹配串中需删除个数 */ }
}
printf("%d\n",dp[l]);
} return ;
}

USACO 2007 February Silver The Cow Lexicon /// DP oj24258的更多相关文章

  1. USACO 2007 November Silver Best Cow Line /// oj21653

    题目大意: 输入n 接下来n行字母 在队头和队尾中选出较小的放入新的队列 Sample Input 6ACDBCB Sample Output ABCBCD   注意相同的情况 先判断内层的大小 输出 ...

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

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

  3. POJ3267 The Cow Lexicon(DP+删词)

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

  4. POJ 3267-The Cow Lexicon(DP)

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

  5. USACO 2011 February Silver Cow Line /// 康拓展开模板题 oj22713

    题目大意: 输入n k,1-n的排列,k次操作 操作P:输入一个m 输出第m个排列 操作Q:输入一个排列 输出它是第几个排列 Sample Input 5 2P3Q1 2 5 3 4 Sample O ...

  6. The Cow Lexicon(dp)

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

  7. POJ3267 The Cow Lexicon(dp)

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

  8. BZOJ1915[USACO 2010 Open Gold 1.Cow Hopscotch]——DP+斜率优化

    题目描述 奶牛们正在回味童年,玩一个类似跳格子的游戏,在这个游戏里,奶牛们在草地上画了一行N个格子,(3 <=N <= 250,000),编号为1..N.就像任何一个好游戏一样,这样的跳格 ...

  9. [USACO 2012 Jan Silver] Bale Share【DP】

    传送门:http://www.usaco.org/index.php?page=viewproblem2&cpid=107 没想到太不应该了,真的不应该啊! f[i][j][k]表示前i个包, ...

随机推荐

  1. HIVE常用SQL语句及语法

    HIVE建内部表语句 create table dll102.sougou (id string,pwd string,name string,count int,seqno int,address ...

  2. 任意两点间的最短路问题(Floyd-Warshall算法)

    /* 任意两点间的最短路问题(Floyd-Warshall算法) */ import java.util.Scanner; public class Main { //图的顶点数,总边数 static ...

  3. Typora使用入门

    使用sublime编写markdown语法不太方便,使用专门的markdown编辑软件会更方便一些! 1.typora常用快捷键 ctrl + /     切换编辑语法模式/预览模式 ctrl + 1 ...

  4. 下面是一段delphi代码,你在c# 中引入api 即可

    procedure TForm1.Button1Click(Sender: TObject);var i:HWND; cs:CREATESTRUCT;begin// i := FindWindowEx ...

  5. 显示所有用户,mysql的基本操作

    可以实现显示数据库中所有用户. select user from mysql.user; select user,host,password from mysql.user;   给表创建用户,授权: ...

  6. NX二次开发-UFUN创建块UF_MODL_create_block1

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); UF_FEATURE_SIGN Sign = ...

  7. (转)简述负载均衡&CDN技术

    转:http://www.cnblogs.com/mokafamily/p/4402366.html#commentform 曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维 ...

  8. python输入输出(二)

    输出 >>> print(5) 5 >>> print(5*6) 30 >>> s1 = "hello" >>&g ...

  9. 去掉Word 标题编号变成黑框

    问题: 在使用Word编写文档时,提前拟好的标题编号会突然变成黑框(黑色的方框,黑色的矩形),如下图 解决方案: 1.将光标定位到标题中,紧邻黑框的右侧 2.按键盘左方向键使方框变成黑色 3.按键盘的 ...

  10. day 89 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...