来自:生物信息学-陈铭第二版的一个例题。

题目:

目前的代码,运行不正确,关键就是不知道怎么回溯啊,回溯怎么标记呢?

#include <iostream>
#include<vector>
using namespace std; vector<char> s1,t1;//在回溯的时候使用
string s,t;//输入两个字符串
int dp[][];
int maxs(int x,int y,int z){
if(x>=y&&x>=z)return x;
else if(y>=x&&y>=z)return y;
else return z;
}
void dfs(int len1,int len2){
//递归出口
if(len1==||len2==){//这里有一个问题就是另一个没放完怎么办?我要的是全部的。
//如果有一个其中没放完,那么接着放。
if(len1!=){//如果s1没放完那么
for(int i=len1-;i>=;i--){
s1.push_back(s[i]);
t1.push_back('-');
}
}
if(len2!=){
for(int i=len2-;i>=;i--){
s1.push_back('-');
t1.push_back(t[i]);
}
} //打印s1,t1。
for(int i=s1.size()-;i>=;i--)
cout<<s1[i]<<" ";
cout<<"\n";
for(int i=t1.size()-;i>=;i--)
cout<<t1[i]<<" ";
cout<<"\n\n";
return ;
} //先求出左上、上、下三者中最大的值
int m=maxs(dp[len1-][len2-],dp[len1-][len2],dp[len1][len2-]);
if(dp[len1-][len2-]==m){//如果这样的话,那么就将二者push进来
s1.push_back(s[len1-]);
t1.push_back(t[len2-]);
dfs(len1-,len2-);
s1.pop_back();t1.pop_back();
}
if(dp[len1-][len2]==m){
s1.push_back(s[len1-]);
t1.push_back('-');
dfs(len1-,len2);
s1.pop_back();t1.pop_back();
}
if(dp[len1][len2-]==m){
s1.push_back('-');
t1.push_back(t[len2-]);
dfs(len1,len2-);
s1.pop_back();t1.pop_back();
}
} int main() { cin>>s>>t;
int len1=s.size();
int len2=t.size();
int x,y,z;
for(int i=;i<=len1;i++){
for(int j=;j<=len2;j++){
if(i==&&j==){
dp[i][j]=;continue;
}
// if(i==0||j==0){//这么写是不对的,因为不知道是哪个插入了多少空格。
// dp[i][j]=-1;continue;
// }
if(i==){//相当于在s中一直插入-。
dp[i][j]=dp[i][j-]-;continue;
}
if(j==){
dp[i][j]=dp[i-][j]-;continue;
}
x=dp[i][j-]-;//在t中插入空格
y=dp[i-][j-]+(s[i-]==t[j-]?:-);//比较两者是否相同,相同+2,否则-1
z=dp[i-][j]-;//在s中插入空格
dp[i][j]=maxs(x,y,z);
}//在计算y时,一开始没有加上三元表达式的括号,导致计算错误。
}
//下面是怎么回溯找到解呢???
for(int i=;i<=len1;i++){
for(int j=;j<=len2;j++){
cout<<dp[i][j];
if(dp[i][j]<)cout<<" ";
else cout<<" ";
}
cout<<"\n";
}
dfs(len1,len2);
return ;
}
/**
acgctg
catgt
**/

目前的运行结果:

dp矩阵是正确的但是回溯结果不对,还是编程能力有限,先思考着,有解了再过来。

2020-3-14更新————————————

感觉自己那个时候就是个sb,脑子不清醒才学这些,有个p用。。。

生信-序列比较dp[未完成]的更多相关文章

  1. 生信-使用NCBI进行目的基因的引物设计

    使用NCBI进行目的基因的引物设计 全文概述 利用生信工具进行目的基因的引物设计,使用了NCBI进行筛选与设计引物,使用 idtdna对筛选出的DNA进行检查.本文分享了如何筛选出高质量的基因引物,帮 ...

  2. 生信工具汇总--OMICtools

    各种生信工具: https://omictools.com/

  3. 生信基础知识【04】GO和pathway分析

    非原创 参考资料: 一文掌握GO和pathway分析 - 生物信息学讨论版 -丁香园论坛http://www.dxy.cn/bbs/thread/34904124#34904124 GO富集 GO是G ...

  4. 生信软件的好帮手-bioconda--转载

    http://mp.weixin.qq.com/s/nK1Kkf9lfZStoX25Y7SzHQ 这篇文章主要适用于Linux平台,当然MacOS也行,不过它有更好安装方法. 此外网上也会许多更好的关 ...

  5. codevs 1962 马棚问题--序列型DP

    1962 马棚问题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 每天,小明和他的马外出,然后他们一边跑一边玩耍.当他们结束 ...

  6. 精心整理(含图版)|你要的全拿走!(R数据分析,可视化,生信实战)

    本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/ZEjaxDifNATeV8fO4krOIQ更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号. 为 ...

  7. 括号序列的dp问题模型

    括号序列的dp问题模型 Codeforces314E ◦给定一个长度为n的仅包含左括号和问号的字符串,将问号变成左括号或 右括号使得该括号序列合法,求方案总数. ◦例如(())与()()都是合法的括号 ...

  8. [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)

    [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...

  9. 5.13 省选模拟赛 优雅的绽放吧,墨染樱花 多项式 prufer序列 计数 dp

    LINK:优雅的绽放吧,墨染樱花 当时考完只会50分的做法 最近做了某道题受到启发 故会做这道题目了.(末尾附30分 50分 100分code 看到度数容易想到prufer序列 考虑dp统计方案数. ...

随机推荐

  1. PHP 汉字转成拼音

    <?php class ZH{ /** * 将字符串转化为拼音 */ function Pinyin($_String, $_Code='gb2312') { $_DataKey =" ...

  2. sublime text 3中配置golang开发环境

    1:首先下载 Go源码 https://golang.org/dl/  [根据不同的环境选择] 2:新建文件项目文件夹 存放  D:/Go_project 分别建立  bin  src  pkg  子 ...

  3. 查看sdk

  4. ie中自动识别单屏与双屏(js)

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...

  5. AWS系列-Amazon Simple Notification Service (SNS)

    SNS是一项 Web 服务,用于协调和管理向订阅终端节点或客户交付或发送消息的过程.在 Amazon SNS 中有两种类型的客户端:发布者和订阅者,也称为生产者和消费者.发布者通过创建消息并将消息发送 ...

  6. JSON-Server 安装

    在后台还没给接口之前,使用JSON-Server搭建一台JSON服务器,将接口要返回的数据放在json文件里面.然后请求这些数据,这样我们可以先做一些东西,等后台接口好了之后直接替换就可以了,不必一直 ...

  7. 用SQL语句创建触发器

    --假设XSCJ数据库中增加一新表XS_HIS,表结构和表XS相同,用来存放从XS--表 --中删除的记录.创建一个触发器,当XS表被删除一行,把删除的记录写到日--志表XS_HIS中. CREATE ...

  8. poj_2559 单调栈

    题目大意 给出一个柱形图中柱子的高度,每个柱子的宽度为1,柱子相邻.求出柱形图中可能形成的矩形的最大面积. 题目分析 以每个柱子(高度为h[i])为中心,向两边延展求出以该h[i]为高度的矩形的最大宽 ...

  9. Go基础---->go的第一个程序

    今天我们学习搭建一个学习go语言的开发环境. Go语言 一.下载go 下载地址:https://golang.org/dl/ 校验下载,在命令行输入go version 二.编写第一个hello wo ...

  10. poj 1386

    Play on Words Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11312   Accepted: 3862 De ...