生信-序列比较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统计方案数. ...
随机推荐
- [oracle] update语句卡住问题
执行update语句的时候发现执行半天不成功 update main_order set order_source = '2', order_status = '2' 查询哪些对象被锁 select ...
- Hadoop周边生态软件和简要工作原理(一)
转自:http://www.it165.net/admin/html/201307/1531.html 基本都是在群里讨论的时候,别人问的入门问题,以后想到新的问题再补充进来.但是其实入门问题也很重要 ...
- git error Another git process seems to be running in this repository
How to fix error Another git process seems to be running in this repository When you use Git, you se ...
- $-------JSP中表达式语言的$特殊字符的作用
JSP 中EL表达式用法详解 EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user ...
- 【BZOJ】1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(set+并查集+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1604 这题太神了... 简直就是 神思想+神做法+神stl.. 被stl整的我想cry...首先,, ...
- git fork同步是什么意思?
这篇文章主要介绍了git fork同步是什么意思?fork到了哪里?有什么用?怎样用?跟clone有什么差别?本文就一一解释这些问题,须要的朋友能够參考下 官方文档:http://help.githu ...
- 兔子--android中百度地图的开发
效果: API Key的申请地址:http://lbsyun.baidu.com/apiconsole/key 申请注意事项: 安全码:以下界面的SHA1 fingerprint值+;+包名 比如: ...
- Tomcat高并发配置优化
用的JMeter在自己电脑上测试的.Ubuntu10.04(x64)内存2G,cpu E5400 主频2.7.jdk1.6.0_27(x64) , tomcat6.0.33(x64) , oracle ...
- Git------MyEclipse中使用Git
转载:http://www.mamicode.com/info-detail-928508.html
- Surface UEFI 菜单显示
下载 Surface 的恢复映像 https://support.microsoft.com/zh-cn/surfacerecoveryimage UEFI 设置只能在系统启动时进行调整.若要加载 ...