bzoj1633 / P2875 [USACO07FEB]牛的词汇The Cow Lexicon
P2875 [USACO07FEB]牛的词汇The Cow Lexicon
三维dp
它慢,但它好写。
直接根据题意设三个状态:
$f[i][j][k]$表示主串扫到第$i$个字母,匹配到第$j$个单词的第$k$位可以留下的最多字符数
当该位不选时,就传递上一位的数据$f[i][j][k]=f[i-1][j][k]$
当该位可以匹配时:
$if(a[i]==b[j][k]\&\&f[i-1][j][k-1])$
$f[i][j][k]=max(f[i][j][k],f[i-1][j][k-1]+1);$
注意不允许有重叠单词所以要判断前一位
当匹配完一个单词时,就要跳到一个新单词的第一位上,那么:
$f[i][j][1]=max(f[i][j][1],f[i-1][u][len[u]]+1)$
最后用主串的长度减去可留下字符数就是答案了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int max(int &a,int &b){return a>b?a:b;}
int m,n,f[][][],len[],ans;
char a[],b[][];
void output(int x){//debug
cout<<"x:"<<x<<endl;
for(int i=;i<=m;++i,cout<<endl)
for(int j=;j<=len[i];++j)
cout<<f[x][i][j]<<" ";
cout<<endl<<endl;
}
int main(){
scanf("%d%d",&m,&n); scanf("%s",a+);
for(int i=;i<=m;++i)
scanf("%s",b[i]+),len[i]=strlen(b[i]+);
for(int i=;i<=n;++i)
for(int j=;j<=m;++j){
for(int k=;k<=len[j];++k){
f[i][j][k]=f[i-][j][k];
if(a[i]==b[j][k]&&f[i-][j][k-])
f[i][j][k]=max(f[i][j][k],f[i-][j][k-]+);
}
if(a[i]==b[j][])
for(int u=;u<=m;++u)
f[i][j][]=max(f[i][j][],f[i-][u][len[u]]+);
}
for(int i=;i<=m;++i) ans=max(ans,f[n][i][len[i]]);
printf("%d",strlen(a+)-ans);
cout<<endl;
return ;
}
bzoj1633 / P2875 [USACO07FEB]牛的词汇The Cow Lexicon的更多相关文章
- 洛谷P2875 [USACO07FEB]牛的词汇The Cow Lexicon
P2875 [USACO07FEB]牛的词汇The Cow Lexicon 题目描述 Few know that the cows have their own dictionary with W ( ...
- 【题解】Luogu P2875 [USACO07FEB]牛的词汇The Cow Lexicon
题目描述 Few know that the cows have their own dictionary with W (1 ≤ W ≤ 600) words, each containing no ...
- [USACO07FEB]牛的词汇The Cow Lexicon
https://daniu.luogu.org/problemnew/show/P2875 dp[i]表示前i-1个字符,最少删除多少个 枚举位置i, 如果打算从i开始匹配, 枚举单词j,计算从i开始 ...
- [luoguP2875] [USACO07FEB]牛的词汇The Cow Lexicon(DP)
传送门 f[i] 表示前 i 个字符去掉多少个 的最优解 直接暴力DP ——代码 #include <cstdio> #include <cstring> #include & ...
- BZOJ 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典
题目 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 401 Solv ...
- bzoj1654 / P2863 [USACO06JAN]牛的舞会The Cow Prom
P2863 [USACO06JAN]牛的舞会The Cow Prom 求点数$>1$的强连通分量数,裸的Tanjan模板. #include<iostream> #include&l ...
- 洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game
洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game 题目描述 Bessie is playing a number game against Farmer John, ...
- 洛谷 P2863 [USACO06JAN]牛的舞会The Cow Prom-强连通分量(Tarjan)
本来分好组之后,就确定好了每个人要学什么,我去学数据结构啊. 因为前一段时间遇到一道题是用Lca写的,不会,就去学. 然后发现Lca分为在线算法和离线算法,在线算法有含RMQ的ST算法,前面的博客也写 ...
- P2863 [USACO06JAN]牛的舞会The Cow Prom
洛谷——P2863 [USACO06JAN]牛的舞会The Cow Prom 题目描述 The N (2 <= N <= 10,000) cows are so excited: it's ...
随机推荐
- MapReduce分组
分组:相同key的value进行分组 例子:如下输入输出,右边的第一列没有重复值,第二列取得是当第一列相同时第二例取最大值 分析:首先确定<k3,v3>,k3的选择两种方式, 方法1. ...
- 伸展树(Splay Tree)进阶 - 从原理到实现
目录 1 简介 2 基础操作 2.1 旋转 2.2 伸展操作 3 常规操作 3.1 插入操作 3.2 删除操作 3.3 查找操作 3.4 查找某数的排名.查找某排名的数 3.4.1 查找某数的排名 3 ...
- ORACLE中Drop table cascade constraints之后果.
当你要drop一个table时,如果删除table的动作会造成trigger或constraint产生矛盾,系统会出现错误警告的讯息而不会允许执行..一个极简单的例子,例如你有一个员工基本资料表,上面 ...
- linux:文件打包与压缩
学习内容介绍:Linux 上常用的压缩/解压工具,介绍了zip.rar.tar的使用. 先总结一下常用命令: zip: 打包 :zip something.zip something (目录请加 -r ...
- hyperledger
http://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html https://github.com/hyperledger/block ...
- linux系统java的安装
(一)下载java8 下载链接:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...
- CF1044B Intersecting Subtrees 构造+树论
正解:构造 解题报告: 传送门 又是一道交互题!爱了爱了! 这题真的,极妙!非常神仙!就非常非常思维题! 直接说解法了吼 说起来实在是简单鸭 就是先问一个对方的联通块中的一个点在我这儿的编号,记为x ...
- C++三大特性之继承
原文地址:https://qunxinghu.github.io/2016/09/12/C++%20%E4%B8%89%E5%A4%A7%E7%89%B9%E6%80%A7%E4%B9%8B%E7%B ...
- Redis经验谈(转)
原文:http://www.programmer.com.cn/14577/ 新浪作为全世界最大的Redis用户,在开发和运维方面有非常多的经验.本文作者来自新浪,希望能为业界提供一些亲身经历,让大家 ...
- jquery实现选项卡(两句即可实现)
<!DOCTYPE HTML><html> <head> <meta charset="utf-8"> ...