解题:USACO07FEB The Cow Lexicon
第一次做Trie上dp,感谢 @i207M 的资瓷
对子串们建立一棵Trie,设$dp[i][j]$表示到母串第$i$位为止在$Trie$上的$j$号节点时的最小修改数量,然后就可以枚举母串各位与Trie的节点dp了。
首先有两个显然的转移
$dp[i+1][j]=min(dp[i+1][j],dp[i][j]+1)$(将当前字符认为是噪音,继续考虑下一位)
$dp[i+1][son[s[i+1]]]=min(dp[i+1][son[s[i+1]]],dp[i][j])$(在Trie上匹配一个)
然后发现并不对......
事实上还有一个转移,当我们匹配完一个子串时,我们又回到了Trie的根节点,即对于每个结束节点$j$有
$dp[i][0]=min(dp[i][0],dp[i][j])$
好像凉了,转移回根节点就出环了。不过事实上只需要单独把根节点拿出来最后转移即可,就是在每一位转移结束后讨论一下根节点的情况
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=,L=;
int trie[M*L][],las[M],dp[N][M*L];
char talk[N],word[M][L];
int n,m,tot,ans=1e9;
bool ed[M*L];
void Insert(char *s,int id)
{
int len=strlen(s),nde=;
for(int i=;i<len;i++)
{
int val=s[i]-'a'+;
if(!trie[nde][val])
trie[nde][val]=++tot;
nde=trie[nde][val];
}
las[id]=nde,ed[nde]=true;
}
int main ()
{
scanf("%d%d%s",&n,&m,talk+);
for(int i=;i<=m;i++)
talk[i]=talk[i]-'a'+;
for(int i=;i<=n;i++)
scanf("%s",word[i]),Insert(word[i],i);
memset(dp,0x3f,sizeof dp),dp[][]=;
for(int i=;i<=m;i++)
{
for(int j=;j<=tot;j++)
{
dp[i+][j]=min(dp[i+][j],dp[i][j]+);
if(ed[j]) dp[i][]=min(dp[i][],dp[i][j]);
int nde=trie[j][(int)talk[i+]];
if(nde) dp[i+][nde]=min(dp[i+][nde],dp[i][j]);
}
dp[i+][]=min(dp[i+][],dp[i][]+);
int nde=trie[][(int)talk[i+]];
if(nde) dp[i+][nde]=min(dp[i+][nde],dp[i][]);
}
printf("%d",dp[m][]);
return ;
}
解题:USACO07FEB The Cow Lexicon的更多相关文章
- bzoj1633 / P2875 [USACO07FEB]牛的词汇The Cow Lexicon
P2875 [USACO07FEB]牛的词汇The Cow Lexicon 三维dp 它慢,但它好写. 直接根据题意设三个状态: $f[i][j][k]$表示主串扫到第$i$个字母,匹配到第$j$个单 ...
- 洛谷P2875 [USACO07FEB]牛的词汇The Cow Lexicon
P2875 [USACO07FEB]牛的词汇The Cow Lexicon 题目描述 Few know that the cows have their own dictionary with W ( ...
- 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: 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(dp:字符串组合)
The Cow Lexicon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8211 Accepted: 3864 D ...
随机推荐
- Hyperledger Fabric chaincode 开发(疑难解答)
Q&A Q1: 使用fabric release 1.2 进行golang chaincode开发时报错: ..\..\hyperledger\fabric\vendor\github.com ...
- Redis勒索事件爆发,如何避免从删库到跑路?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 9月10日下午,又一起规模化利用Redis未授权访问漏洞攻击数据库的事件发生,此次 ...
- UVa 10055
说一下犯错的地方: 1)没有注意数据范围,题目中是The input numbers are not greater than balabalabala. 而这个32位的int类型恰好装不下2^32, ...
- Redux 入门教程(一):基本用法
转自http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_one_basic_usages.html(仅供个人学习使用) 首先明确一点, ...
- 关于inherit的笔记
1. inherit是动态的 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- 关于手机端h5上传图片配合exif.min.js,processImg.js的使用
首先这里有个new FileReader()的概念,这是h5新增的,用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件 ...
- Notes of Daily Scrum Meeting(11.6 and 11.7)
Notes of Daily Scrum Meeting(11.6 and 11.7) 因为七号星期五是放假的第一天,好几名队员要么是出去玩,要么是回家了,所以我们讨论之后在七号没有开始代码的编写, ...
- Java实验五(客户端)
一. 实验内容 1. 运行教材上TCP代码,结对进行,一人服务器,一人客户端: 2. 利用加解密代码包,编译运行代码,客户端加密,服务器解密: 3. 客户端加密明文后将密文通过 ...
- Linux里的2>&1的理解
转载自:https://blog.csdn.net/ggxiaobai/article/details/53507530 我们在Linux下经常会碰到nohup command>/dev/nul ...
- 《UML大战需求分析》-读后感一
UML英文全拼是unified modeling language 就是统一建模语言. UML就是一种软件开发中帮助我们设计的标准,虽然说是建模语言但是它是图形,图形能更清楚的表达我们对软件的想法.U ...