生信-序列比较dp[未完成]
来自:生物信息学-陈铭第二版的一个例题。
题目:



目前的代码,运行不正确,关键就是不知道怎么回溯啊,回溯怎么标记呢?
#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[未完成]的更多相关文章
- 生信-使用NCBI进行目的基因的引物设计
使用NCBI进行目的基因的引物设计 全文概述 利用生信工具进行目的基因的引物设计,使用了NCBI进行筛选与设计引物,使用 idtdna对筛选出的DNA进行检查.本文分享了如何筛选出高质量的基因引物,帮 ...
- 生信工具汇总--OMICtools
各种生信工具: https://omictools.com/
- 生信基础知识【04】GO和pathway分析
非原创 参考资料: 一文掌握GO和pathway分析 - 生物信息学讨论版 -丁香园论坛http://www.dxy.cn/bbs/thread/34904124#34904124 GO富集 GO是G ...
- 生信软件的好帮手-bioconda--转载
http://mp.weixin.qq.com/s/nK1Kkf9lfZStoX25Y7SzHQ 这篇文章主要适用于Linux平台,当然MacOS也行,不过它有更好安装方法. 此外网上也会许多更好的关 ...
- codevs 1962 马棚问题--序列型DP
1962 马棚问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 每天,小明和他的马外出,然后他们一边跑一边玩耍.当他们结束 ...
- 精心整理(含图版)|你要的全拿走!(R数据分析,可视化,生信实战)
本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/ZEjaxDifNATeV8fO4krOIQ更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号. 为 ...
- 括号序列的dp问题模型
括号序列的dp问题模型 Codeforces314E ◦给定一个长度为n的仅包含左括号和问号的字符串,将问号变成左括号或 右括号使得该括号序列合法,求方案总数. ◦例如(())与()()都是合法的括号 ...
- [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)
[BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...
- 5.13 省选模拟赛 优雅的绽放吧,墨染樱花 多项式 prufer序列 计数 dp
LINK:优雅的绽放吧,墨染樱花 当时考完只会50分的做法 最近做了某道题受到启发 故会做这道题目了.(末尾附30分 50分 100分code 看到度数容易想到prufer序列 考虑dp统计方案数. ...
随机推荐
- 日期-date.js
Date.prototype.format = function(format) { var o = { "M+" : this.getMonth() + 1, // 月 &quo ...
- 009杰信-创建购销合同Excel报表系列-2-建立购销合同(增删改查)
前面一篇文章已经分析好了数据库的表,这篇文章针对购销合同表做一个增删改查. 和之前的表的增删该查类似. 项目结构如下:
- selenium 获取按钮的笔记
测试odoo时,发现大部分按钮都是动态生成,id也是动态的, 只能用xpath,但是配置一旦改变导致按钮位置改变 想到一个办法,遍历所有按钮,然后内容相符的才点击,测试代码如下 submit_loc ...
- php -- 用文本来存储内容,file_put_contents,serialize,unserialize
根据存储的内容来划分 字符串: file_put_contents :将一个字符串写入文件 语法:int file_put_contents ( string $filename , mixed $d ...
- php -- 魔术方法 之 设置属性:__set()
属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __set():当用户在设置不存在或者权限不够的属性的时候会自动触发 没有设置__set($name,$v ...
- ssh证书登录(实例详解)
前言 本文基于实际Linux管理工作,实例讲解工作中使用ssh证书登录的实际流程,讲解ssh证书登录的配置原理,基于配置原理,解决实际工作中,windows下使用SecureCRT证书登录的各种问 ...
- VC++ Debug条件断点使用
If you're trying to reproduce a rare event and getting too many false positives with your breakpoint ...
- C# winform 中MessageBox用法大全(附效果图)
我们在程序中经常会用到MessageBox. MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: 1.MessageBox.Show(“Hello~~~~”); 最简单的, ...
- 自定义控件_StickyNavLaout
关注我一.View结构原理1.extends linearLayout 继承想要用的布局,首先完成布局的填充在 onFinishInflate 方法中 findViewById(); @Overrid ...
- 链接href的多重使用
1. 拨打电话 在电话号码前面可以加上 + (加号)表示国际号码. <a href="tel:10086">10086</a> 使用wtai协议进行拨打电话 ...