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: ...
随机推荐
- 使用的一些支持swift3.0的开源库
#解决键盘弹起遮挡工具 pod 'IQKeyboardManagerSwift', '~>4.0.6' #多种类型弹出框 pod 'SCLAlertView', :git => 'http ...
- jq + 面向对象实现拼图游戏
jq + 面向对象实现拼图游戏 知识点 拖拽事件 es6面向对象 jquery事件 效果图 html: <div class="wraper"> <div cla ...
- tomcat7:deploy (default-cli) on project myproject: Cannot invoke Tomcat manager: Software caused connection abort: socket write error
我使用的默认settings.xml,默认的里面只有tomcat6的服务器,没有tomcat7的服务器,接着往下看,下面来验证我的言论 进行tomcat7:run的命令时
- 【kafka】安装部署kafka集群(kafka版本:kafka_2.12-2.3.0)
3.2.1 下载kafka并安装kafka_2.12-2.3.0.tgz tar -zxvf kafka_2.12-2.3.0.tgz 3.2.2 配置kafka集群 在config/server.p ...
- Oracle 限制行的子句
12c新特性 限制行的子句允许限制查询返回的行.可以指定偏移量,以及要返回的行数或百分比.您可以使用此子句实现Top-N报告.要获得一致的结果,请指定ORDER_by子句以确保具有确定性的排序顺序. ...
- 微信小程序 时间戳 转化为 日期格式
util.js : function transTime(unixtime) { var dateTime = new Date(parseInt(unixtime) * 1000) var yea ...
- kubernetes 集群添加node节点
kubernetes 集群添加node节点 注意,我们并不需要把新增的node ip加入到证书里重新生成!!! 下面我们以添加node03为例 一.添加集群里个节点的hostname并设置好对应主机名 ...
- SSH安全协议
SSHD服务 介绍:SSH 协议:安全外壳协议.为 Secure Shell 的缩写.SSH 为建立在应用层和传输层基础上的安全协议. 默认端口22 作用 sshd服务使用SSH协议可以用来进行远程控 ...
- 基于h5+的微信登录,hbuilder打包
1.打开app项目的manifest.json的文件,选择模块权限配置,将OAuth(登录鉴权)模块添加至已选模块中 2.选择SDK配置,在plus.oauuth·登录鉴权中,勾选□ 微信登录,配置好 ...
- MyEclipse激活代码
package TestCase; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...