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的更多相关文章

  1. 洛谷P2875 [USACO07FEB]牛的词汇The Cow Lexicon

    P2875 [USACO07FEB]牛的词汇The Cow Lexicon 题目描述 Few know that the cows have their own dictionary with W ( ...

  2. 【题解】Luogu P2875 [USACO07FEB]牛的词汇The Cow Lexicon

    题目描述 Few know that the cows have their own dictionary with W (1 ≤ W ≤ 600) words, each containing no ...

  3. [USACO07FEB]牛的词汇The Cow Lexicon

    https://daniu.luogu.org/problemnew/show/P2875 dp[i]表示前i-1个字符,最少删除多少个 枚举位置i, 如果打算从i开始匹配, 枚举单词j,计算从i开始 ...

  4. [luoguP2875] [USACO07FEB]牛的词汇The Cow Lexicon(DP)

    传送门 f[i] 表示前 i 个字符去掉多少个 的最优解 直接暴力DP ——代码 #include <cstdio> #include <cstring> #include & ...

  5. BZOJ 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典

    题目 1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 401  Solv ...

  6. bzoj1654 / P2863 [USACO06JAN]牛的舞会The Cow Prom

    P2863 [USACO06JAN]牛的舞会The Cow Prom 求点数$>1$的强连通分量数,裸的Tanjan模板. #include<iostream> #include&l ...

  7. 洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game

    洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game 题目描述 Bessie is playing a number game against Farmer John, ...

  8. 洛谷 P2863 [USACO06JAN]牛的舞会The Cow Prom-强连通分量(Tarjan)

    本来分好组之后,就确定好了每个人要学什么,我去学数据结构啊. 因为前一段时间遇到一道题是用Lca写的,不会,就去学. 然后发现Lca分为在线算法和离线算法,在线算法有含RMQ的ST算法,前面的博客也写 ...

  9. P2863 [USACO06JAN]牛的舞会The Cow Prom

    洛谷——P2863 [USACO06JAN]牛的舞会The Cow Prom 题目描述 The N (2 <= N <= 10,000) cows are so excited: it's ...

随机推荐

  1. Linux--netstat命令

    netstat:显示网络状态 语法定义:netstat [-acCeFghilMnNoprstuvVwx] [-A<网络类型>][--ip] 参数说明: -a 或 -all :显示所有连线 ...

  2. ELKStack生产案例

    需求分析: 访问日志:apache访问日志,nginx访问日志,tomcat file 错误日志: error log,java日志 直接收 java异常需要处理 系统日志:/var/log/*   ...

  3. SQL Fundamentals || Single-Row Functions || 转换函数 Conversion function

    SQL Fundamentals || Oracle SQL语言   SQL Fundamentals: Using Single-Row Functions to Customize Output使 ...

  4. JDBC及Filter

    JNDI容器:Java Naming Directory Interface,java命名目录接口EJB:javaEE服务器端组件模型,Enterprise JavaBean,设计目标与核心应用是建立 ...

  5. Oracle安装部署之linux(redhat/centos)快速安装oracle 11g rac

    安装oracle 11gR2 RAC 一.网络规划及安装虚拟主机 主机名 主机版本 Ip rac1.localdomain Redhat 6.5 RAC节点1 192.168.100.11 rac2. ...

  6. kerberos (https://en.wikipedia.org/wiki/Kerberos_(protocol))

    Protocol[edit] Description[edit] The client authenticates itself to the Authentication Server (AS) w ...

  7. vs code 设置工作区背景图片方法

    1.扩展--安装background 2.文件--首选项--设置--在settings.josn中编辑--右侧用户设置添加 "background.useFront": false ...

  8. 洛谷P3157 动态逆序对 [CQOI2011] cdq分治

    正解:cdq分治 解题报告: 传送门! 长得有点像双倍经验还麻油仔细看先放上来QwQ! 这题首先想到的就直接做逆序对,然后记录每个点的贡献,删去就减掉就好 但是仔细一想会发现布星啊,如果有一对逆序对的 ...

  9. 最新版OpenWrt编译教程,解决依赖问题

    Install git , to conveniently download the OpenWrt source code, and build tools to do the cross-comp ...

  10. 将你的wordpress博客添加到百度个性首页

    当你登陆百度账号后,进入百度首页会显示新的个性首页,不仅仅有搜索框,下面还有一个小型导航,放着你经常去的网站. 百度提供了一键添加到百度首页的按钮代码. 首先,先打开分享到百度新首页代码申请页面:ht ...