2019.10.25字符串——zr
题意:
给你两个字符串,由01组成;求他们两个的最短公共非子序列,要求字典序最小;
非公共子序列:都不是这两个字符串的子序列;
本人只会暴力啊,二进制枚举稳拿15分;
然而这道题其实是一个最短路题;
题解:
贪心考虑从前往后s1……si,维护一个j表示当前字符串已经匹配到t1……tj,
贪心考虑tj'=si+1的j'匹配;
要求字典序最小,实际上我们求得就是一个最短路;
从中止状态反向遍历,就可以记录哪些点在起点到终点的最短路上。DP的状态就是最短路;
再从开始点开始,哪个状态在最短路上,就输出;
时间复杂度(n2);
我觉得吧,其实就是在这两个字符串上找到最短的公共子串(感性理解,实际上并不是这个意思),我们要匹配到n+1,m+1,一个串结束了,并不代表状态的结束;
因为当前状态+0/1可能还是较长串的子序列;
当我们匹配到n+1,m+1的时候就是最短非公共子序列;
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
int n,m;
char s[maxn],t[maxn]; int nxt_s[maxn][],nxt_t[maxn][]; int dp[maxn][maxn]; int on_road[maxn][maxn]; int main()
{
scanf("%d%d",&n,&m);
scanf("%s%s",s+,t+);
nxt_s[n+][]=nxt_s[n+][]=n+;
for(int i=n;i>=;i--)
{
int c=s[i]-'';
nxt_s[i][c]=i;
nxt_s[i][c^]=nxt_s[i+][c^];
}
nxt_t[m+][]=nxt_t[m+][]=m+;
for(int i=m;i>=;i--)
{
int c=t[i]-'';
nxt_t[i][c]=i;
nxt_t[i][c^]=nxt_t[i+][c^];
} memset(dp,0x3f,sizeof(dp));
dp[][]=;
for(int i=;i<=n+;i++)
{
for(int j=;j<=m+;j++)
{
for(int c=;c<;c++)
{
int x=i<=n?nxt_s[i+][c]:i;
int y=j<=m?nxt_t[j+][c]:j;
if(dp[x][y]>dp[i][j]+)
{
dp[x][y]=dp[i][j]+;
}
}
}
} on_road[n+][m+]=;
for(int i=n+;i>=;i--)
{
for(int j=m+;j>=;j--)
{
for(int c=;c<;c++)
{
int x=i<=n?nxt_s[i+][c]:i;
int y=j<=m?nxt_t[j+][c]:j;
if(dp[x][y]==dp[i][j]+&&on_road[x][y])
{
on_road[i][j]=;
}
}
}
} int i=,j=; while(i<=n||j<=m)
{
for(int c=;c<;c++)
{
int x=(i<=n?nxt_s[i+][c]:i);
int y=(j<=m?nxt_t[j+][c]:j);
if(dp[x][y]==dp[i][j]+&&on_road[x][y])
{
putchar(c+'');
i=x;j=y;
break;
}
}
} return ;
}
2019.10.25字符串——zr的更多相关文章
- Selenium对浏览器支持的版本【2019/10/25更新】
最新的selenium与几种常用浏览器的版本兼容情况:(以下驱动,点击直接跳转官方下载地址) 尽量选择最新版本-1的浏览器,比如最新的是60,那就使用59.(建议Chrome更新至72+版本.Fire ...
- 2019.10.25 csp-s模拟测试87 反思总结
一次非常神奇的考试,考完试以后看着T2的0pts突然笑死我自己 太智障了这什么神奇的题意理解错误23333 T1一眼分类讨论,两眼二分,觉得分类讨论有点玄学但是出题人八成不会卡[何],然后本着对二分的 ...
- 2019.10.25 csp-s模拟测试86 反思总结
继续存档 早上来补了一下昨天的题,不过肯定这两天的没法完全补起来 T1: 经典思路:关于位运算的题讨论每一位的贡献 #include<iostream> #include<cstdi ...
- Alpha冲刺(2/10)——2019.4.25
所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(2/10)--2019.4.25 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...
- [2019.03.25]Linux中的查找
TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...
- TIZ_c 第0周总结(2019/10/15-2019/10/22)工欲善其事必先利其器
TIZ_c 第0周总结(2019/10/15-2019/10/22)工欲善其事必先利其器 任务清单 给自己取一个酷酷的id,并选择1-2个喜欢的方向.(只是初步选择,后期可更改) 改下群名片.例如yo ...
- Java习题10.25
Java习题10.25 1. 实际上这道题考查的是两同两小一大原则: 方法名相同,参数类型相同 子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类 ...
- 背水一战 Windows 10 (25) - MVVM: 通过 x:Bind 实现 MVVM(不用 Command)
[源码下载] 背水一战 Windows 10 (25) - MVVM: 通过 x:Bind 实现 MVVM(不用 Command) 作者:webabcd 介绍背水一战 Windows 10 之 MVV ...
- /proc/interrupts 统计2.6.38.8与3.10.25差异
eth4进,eth5出 linux-3.10.25 67: 2 3 2 3 PCI-MSI-edge eth468: ...
随机推荐
- C#只读属性
using System; using System.Collections.Generic; using System.Text; namespace 面向对象 { class Person { / ...
- Cookie中的HttpOnly
1.什么是HttpOnly? 如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,具体一点的介绍请google进行搜索 2.ja ...
- ElementUI 源码定制防坑指南
背景 我司OA系统公文管理模块Office在线编辑使用的是金格IWebOffice中间件[PPAPI插件,通过<object>标签加载],IWebOffice在chrome中设置div盒子 ...
- Springboot项目统一异常处理
Springboot项目统一异常处理 一.接口返回值封装 1. 定义Result对象,作为通用返回结果封装 2. 定义CodeMsg对象,作为通用状态码和消息封装 二.定义全局异常类 三.定义异常处理 ...
- Android里的Dalvik、ART、JIT、AOT有什么关系?
JIT,Just-in-time,即时编译,边运行边编译: AOT,Ahead Of Time,提前编译,指运行前编译. 区别 这两种编译方式的主要区别在于是否在“运行时”进行编译 优劣JIT优点: ...
- 【JUC】7.CountDownLatch
Latch:门闩.一种线程通信的方式:当程序不涉及同步,仅仅需要线程通信的时候,使用synchronize或者lock的线程通信等待唤醒机制,就显得太重了: 这时候,可以考虑使用信号量类:CountD ...
- p1.BTC-密码学的原理
所谓加密货币是不加密的,区块链上所有的交易内容(包括:账户的地址,转账的地址)都是公开的. Bitcoin中主要用到密码学的中的两个功能:Hash和签名. 一 Hash Cryptographic h ...
- @JsonIgnore注解
注解名称:@JsonIgnore 作用:在实体类向前台返回数据时用来忽略不想传递给前台的属性或接口. Eg:User实体中会有字段password字段,当返回用户信息给前台的时候,当然是不希望将pas ...
- angularcli 第一篇(新建、组件、模块)
1.新建并启动项目: 1.安装: npminstall -g @angular/cli 2.新建: ng new mytest 3.进入项目:cd mytest 4.启动: ng serve 5.打开 ...
- Django使用swagger生成接口文档
参考博客:Django接入Swagger,生成Swagger接口文档-操作解析 Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.总体目标是使客户端和文 ...