[USACO2007FEB S] The Cow Lexicon S
题目描述
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.
输入格式
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
输出格式
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.
样例 #1
样例输入 #1
6 10
browndcodw
cow
milk
white
black
brown
farmer
样例输出 #1
2
首先考虑暴力。设计\(dp_i\)表示前i个字符要去掉多少个字符可以被翻译。暴力转移就是枚举上一个单词的结尾在j,在j+1~i中只能有一个单词,那么价值是\((i-j)-\)最长的单词。不妨枚举选了哪一种单词,然后看一下能不能匹配。
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int w,l,dp[N],len[N];
char s[N][N],t[N];
int can(int x,int y)
{
int ans=y-x+1;
for(int k=1;k<=w;k++)//枚举选哪一种单词
{
int r=1;
for(int i=x;i<=y;i++)
{
if(s[k][r]==t[i])
++r;
if(r>len[k])//可以匹配上
ans=min(ans,y-x+1-len[k]);
}
}
return ans;
}
int main()
{
scanf("%d%d%s",&w,&l,t+1);
for(int i=0;i<=l;i++)
dp[i]=i;
for(int i=1;i<=w;i++)
scanf("%s",s[i]+1),len[i]=strlen(s[i]+1);
for(int i=1;i<=l;i++)
for(int j=0;j<i;j++)
dp[i]=min(dp[i],dp[j]+can(j+1,i));
printf("%d",dp[l]);
return 0;
}
但是会超时获得70分。我们发现可以预处理出每个can(l,r)。枚举l和选哪种单词,然后往后推r,如果一个单词在某一处可以被匹配那么在后面都可以匹配的上。
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int w,l,dp[N],len[N],f[N][N];
char s[N][N],t[N];
int can(int x,int y)
{
int ans=2e9;
for(int k=1;k<=w;k++)
{
int r=1;
for(int i=x;i<=y;i++)
{
if(s[k][r]==t[i])
++r;
if(r>len[k])
ans=min(ans,y-x+1-len[k]);
}
}
return ans;
}
int main()
{
memset(f,0x7f,sizeof(f));
scanf("%d%d%s",&w,&l,t+1);
for(int i=0;i<=l;i++)
dp[i]=i;
for(int i=1;i<=w;i++)
scanf("%s",s[i]+1),len[i]=strlen(s[i]+1);
// return can(6,10);
for(int i=1;i<=l;i++)
{
int ans=2e9;
for(int k=1;k<=w;k++)
{
int r=1;
for(int j=i;j<=l;j++)
{
if(s[k][r]==t[j])
++r;
if(r>len[k])
f[i][j]=min(f[i][j],j-i+1-len[k]);
}
}
}
for(int i=1;i<=l;i++)
for(int j=0;j<i;j++)
dp[i]=min(dp[i],dp[j]+f[j+1][i]);
printf("%d",dp[l]);
return 0;
}
[USACO2007FEB S] The Cow Lexicon S的更多相关文章
- POJ3267 The Cow Lexicon(DP+删词)
The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9041 Accepted: 4293 D ...
- POJ 3267 The Cow Lexicon
又见面了,还是原来的配方,还是熟悉的DP....直接秒了... The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- POJ 3267:The Cow Lexicon(DP)
http://poj.org/problem?id=3267 The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submi ...
- The Cow Lexicon
The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8815 Accepted: 4162 Descr ...
- HDOJ-三部曲-1015-The Cow Lexicon
The Cow Lexicon Time Limit : 4000/2000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) To ...
- POJ3267——The Cow Lexicon(动态规划)
The Cow Lexicon DescriptionFew know that the cows have their own dictionary with W (1 ≤ W ≤ 600) wor ...
- poj3267--The Cow Lexicon(dp:字符串组合)
The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8211 Accepted: 3864 D ...
- BZOJ 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典
题目 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 401 Solv ...
- POJ 3267-The Cow Lexicon(DP)
The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8252 Accepted: 3888 D ...
- bzoj1633 / P2875 [USACO07FEB]牛的词汇The Cow Lexicon
P2875 [USACO07FEB]牛的词汇The Cow Lexicon 三维dp 它慢,但它好写. 直接根据题意设三个状态: $f[i][j][k]$表示主串扫到第$i$个字母,匹配到第$j$个单 ...
随机推荐
- 全免费开源-国内搭建ChatGPT个人镜像站与维护全攻略
本教程收集于:AIGC从入门到精通教程汇总 全免费开源,仅需一个域名就可以部署国内的ChatGPT镜像版本. One-Click to deploy well-designed ChatGPT web ...
- Linux 内核 ASoC DMA 引擎驱动程序
Linux 内核 ASoC 框架,在概念上将嵌入式音频系统拆分为多个可复用的组件驱动程序,包括 Codec 类驱动程序.平台类驱动程序和机器类驱动程序.在实现上,机器类驱动程序用 struct snd ...
- jmeter 二次开发详解
背景: JMeter 是一个功能强大的性能测试工具,但它可能无法满足特定项目或组织的特定需求.通过进行二次开发,可以定制 JMeter,使其适应具体项目的需求.例如,可能需要添加自定义的 测试元件.报 ...
- Java下载多个网络文件并打成压缩包
需求:浏览器访问后台的http地址后,后台将多个网络文件打成压缩包返回给浏览器,用户可以通过浏览器直接下载压缩包. 实现: 根据文件链接把文件下载下来并且转成字节码 ,代码: package com ...
- 【项目源码】基于Spring + Spring MVC + MyBatis的图书馆管理系统
基于Spring + Spring MVC + MyBatis的图书馆管理系统.主要功能包括:图书查询.图书管理.图书编辑.读者管理.图书的借阅与归还以及借还日志记录等,非常适合学习研究. 运行配置 ...
- KRPANO资源分析工具下载VR-FACTORY全景图
示:目前分析工具中的全景图下载功能将被极速全景图下载大师替代,相比分析工具,极速全景图下载大师支持更多的网站(包括各类KRPano全景网站,和百度街景) 详细可以查看如下的链接: 极速全景图下载大师官 ...
- 关于使用uniapp时Android 离线打包的注意事项
Android 离线打包 文档地址: https://nativesupport.dcloud.net.cn/AppDocs/usesdk/android 注意事项: 添加权限,需要将 uniapp ...
- getchar()和putchar()
#include <stdio.h> #include <stdlib.h> int main() { char ch; /*.putchar() a. putchar函数的格 ...
- Strimzi Kafka Bridge(桥接)实战之三:自制sdk(golang版本)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<Strimzi Kafka B ...
- 6.使用leetcode去练习语言
目录 1 本章预览 2 简单题举例 2.1 题目描述 2.2 题目解析 2.3 题解 2.4 涉及基础语法 3 中等题举例 3.1 题目描述 3.2 题目解析 3.3 题解 3.4 涉及基础语法 4 ...