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 ...
随机推荐
- Linux--netstat命令
netstat:显示网络状态 语法定义:netstat [-acCeFghilMnNoprstuvVwx] [-A<网络类型>][--ip] 参数说明: -a 或 -all :显示所有连线 ...
- ELKStack生产案例
需求分析: 访问日志:apache访问日志,nginx访问日志,tomcat file 错误日志: error log,java日志 直接收 java异常需要处理 系统日志:/var/log/* ...
- SQL Fundamentals || Single-Row Functions || 转换函数 Conversion function
SQL Fundamentals || Oracle SQL语言 SQL Fundamentals: Using Single-Row Functions to Customize Output使 ...
- JDBC及Filter
JNDI容器:Java Naming Directory Interface,java命名目录接口EJB:javaEE服务器端组件模型,Enterprise JavaBean,设计目标与核心应用是建立 ...
- Oracle安装部署之linux(redhat/centos)快速安装oracle 11g rac
安装oracle 11gR2 RAC 一.网络规划及安装虚拟主机 主机名 主机版本 Ip rac1.localdomain Redhat 6.5 RAC节点1 192.168.100.11 rac2. ...
- kerberos (https://en.wikipedia.org/wiki/Kerberos_(protocol))
Protocol[edit] Description[edit] The client authenticates itself to the Authentication Server (AS) w ...
- vs code 设置工作区背景图片方法
1.扩展--安装background 2.文件--首选项--设置--在settings.josn中编辑--右侧用户设置添加 "background.useFront": false ...
- 洛谷P3157 动态逆序对 [CQOI2011] cdq分治
正解:cdq分治 解题报告: 传送门! 长得有点像双倍经验还麻油仔细看先放上来QwQ! 这题首先想到的就直接做逆序对,然后记录每个点的贡献,删去就减掉就好 但是仔细一想会发现布星啊,如果有一对逆序对的 ...
- 最新版OpenWrt编译教程,解决依赖问题
Install git , to conveniently download the OpenWrt source code, and build tools to do the cross-comp ...
- 将你的wordpress博客添加到百度个性首页
当你登陆百度账号后,进入百度首页会显示新的个性首页,不仅仅有搜索框,下面还有一个小型导航,放着你经常去的网站. 百度提供了一键添加到百度首页的按钮代码. 首先,先打开分享到百度新首页代码申请页面:ht ...