题意:

给你两个字符串,由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的更多相关文章

  1. Selenium对浏览器支持的版本【2019/10/25更新】

    最新的selenium与几种常用浏览器的版本兼容情况:(以下驱动,点击直接跳转官方下载地址) 尽量选择最新版本-1的浏览器,比如最新的是60,那就使用59.(建议Chrome更新至72+版本.Fire ...

  2. 2019.10.25 csp-s模拟测试87 反思总结

    一次非常神奇的考试,考完试以后看着T2的0pts突然笑死我自己 太智障了这什么神奇的题意理解错误23333 T1一眼分类讨论,两眼二分,觉得分类讨论有点玄学但是出题人八成不会卡[何],然后本着对二分的 ...

  3. 2019.10.25 csp-s模拟测试86 反思总结

    继续存档 早上来补了一下昨天的题,不过肯定这两天的没法完全补起来 T1: 经典思路:关于位运算的题讨论每一位的贡献 #include<iostream> #include<cstdi ...

  4. Alpha冲刺(2/10)——2019.4.25

    所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(2/10)--2019.4.25 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...

  5. [2019.03.25]Linux中的查找

    TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...

  6. TIZ_c 第0周总结(2019/10/15-2019/10/22)工欲善其事必先利其器

    TIZ_c 第0周总结(2019/10/15-2019/10/22)工欲善其事必先利其器 任务清单 给自己取一个酷酷的id,并选择1-2个喜欢的方向.(只是初步选择,后期可更改) 改下群名片.例如yo ...

  7. Java习题10.25

    Java习题10.25 1. 实际上这道题考查的是两同两小一大原则: 方法名相同,参数类型相同 子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类 ...

  8. 背水一战 Windows 10 (25) - MVVM: 通过 x:Bind 实现 MVVM(不用 Command)

    [源码下载] 背水一战 Windows 10 (25) - MVVM: 通过 x:Bind 实现 MVVM(不用 Command) 作者:webabcd 介绍背水一战 Windows 10 之 MVV ...

  9. /proc/interrupts 统计2.6.38.8与3.10.25差异

    eth4进,eth5出 linux-3.10.25 67:          2          3          2          3   PCI-MSI-edge     eth468: ...

随机推荐

  1. 和我一起,重零开始学习Ant Design Pro开发解决方案(一)安装开发环境

    安装NODEJS 什么是NODEJS? 百度一下吧,这个真不知道,老码农,别笑话我: 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome Jav ...

  2. Postman请求后台报错:Invalid character found in method name. HTTP method names must be tokens

    在使用Postman请求后台时Postman出现 开发工具控制台报 信息: Error parsing HTTP request header Note: further occurrences of ...

  3. flutter 动画 practice

    import 'package:flutter/material.dart'; import 'dart:io'; import 'dart:async'; main() => runApp(M ...

  4. 阿里云OSS上传文件demo

    1.安装ali-oss npm install ali-oss --save 2.demo 此例中使用到了ElementUI的el-upload组件.因为样式为自定义的 所以没有用element的自动 ...

  5. springboot整合ActiveMQ1(基本使用)

    基本使用,https://www.tapme.top/blog/detail/2018-09-05-10-38 主备模式,https://www.tapme.top/blog/detail/2018- ...

  6. element-ui tree 设置成单选,并且父级不可选

    <el-tree :data="date" //数据来源 show-checkbox //节点是否可被选择 node-key="moduldCode" / ...

  7. vue入门模板——只需一个html

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. Python 依赖版本控制 (requirements.txt 文件生成和使用)

    requirements.txt 最好配合虚拟空间使用, 虚拟空间的使用请参考 Python 虚拟空间的使用 - 难以想象的晴朗. requirements.txt 可以保证项目依赖包版本的确定性, ...

  9. django获取数据queryset中的filter选项

    2.条件选取querySet的时候,filter表示=,exclude表示!=. querySet.distinct() 去重复__exact 精确等于 like 'aaa' __iexact 精确等 ...

  10. [https][tls] 如何使用wireshark查看tls/https加密消息--使用私钥

    之前总结了使用keylog进行https流量分析的方法: [https][tls] 如何使用wireshark查看tls/https加密消息--使用keylog 今天总结一下使用服务器端证书私钥进行h ...