DNA比对
2024-10-18 22:26:52
【编程题】(满分27分)
脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。
DNA携带的遗传信息可以用形如:AGGTCGACTCCA.... 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。
为了简化问题,我们假设,DNA在复制的时候可能出现的偏差是(理论上,对每个碱基被复制时,都可能出现偏差):
1. 漏掉某个脱氧核苷酸。例如把 AGGT 复制成为:AGT
2. 错码,例如把 AGGT 复制成了:AGCT
3. 重码,例如把 AGGT 复制成了:AAGGT
如果某DNA串a,最少要经过 n 次出错,才能变为DNA串b,则称这两个DNA串的距离为 n。
例如:AGGTCATATTCC 与 CGGTCATATTC 的距离为 2
你的任务是:编写程序,找到两个DNA串的距离。
【输入、输出格式要求】
用户先输入整数n(n<100),表示接下来有2n行数据。
接下来输入的2n行每2行表示一组要比对的DNA。(每行数据长度<10000)
程序则输出n行,表示这n组DNA的距离。
例如:用户输入:
3
AGCTAAGGCCTT
AGCTAAGGCCT
AGCTAAGGCCTT
AGGCTAAGGCCTT
AGCTAAGGCCTT
AGCTTAAGGCTT
则程序应输出:
1
1
2
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <map>
#include <ctime>
#include <iomanip>
using namespace std;
const int INF=0x7ffffff;
const double EXP=1e-;
const int MS=;
typedef long long LL;
int dp[MS][MS]; int minv(int a,int b,int c)
{
return a>b?(b>c?c:b):(a>c?c:a); // min(a,min(b,c))
}
/*
ACT
ACTT dp[i][j]=dp[i][j-1]+1; ACTT
ACT dp[i][j]=dp[i-1][j]+1 丢失等效于增加 ACT
ACG dp[i][j]=d[i-1][j-1]+1 */ void solve(string &s1,string &s2)
{
int len1=s1.length();
int len2=s2.length();
for(int i=;i<=len1;i++)
dp[i][]=i;
for(int i=;i<=len2;i++)
dp[][i]=i;
for(int i=;i<=len1;i++)
{
for(int j=;j<=len2;j++)
{
if(s1[i-]==s2[j-])
dp[i][j]=dp[i-][j-];
else
{ // 增加 减少 修改
dp[i][j]=minv(dp[i][j-]+,dp[i-][j]+,dp[i-][j-]+);
}
}
}
cout<<dp[len1][len2]<<endl;
return ;
} int main()
{
int n;
string str1,str2;
cin>>n;
while(n--)
{
cin>>str1>>str2;
solve(str1,str2);
}
return ;
}
最新文章
- Day8-面向对象进阶&;&;socket基础
- Spring10种常见异常解决方法
- 剑指OFFER之反转链表(九度OJ1518)
- 初步boost之pool图书馆学习笔记
- (89c51)16x16点阵屏幕的实现
- 38. Count and Say - Unsolved
- TCP程序中发送和接收数据
- C语言学习(一)
- Exception in thread ";main"; org.I0Itec.zkclient.exception.ZkAuthFailedException: Authentication failure is thrown while creating kafka topic
- selenium跳过webdriver检测并爬取天猫商品数据
- Django表单字段汇总
- Codeforces963C Cutting Rectangle 【数学】
- USART相关问题
- python logging 日志模块的配置和使用
- xgboost 和GBDT的区别
- POJ 2763 Housewife Wind LCA转RMQ+时间戳+线段树成段更新
- 基于swoole扩展实现真正的PHP数据库连接池
- 【Java----判断字符串是否乱码】
- Mybatis 的输入参数学习
- Android启动屏全屏显示
热门文章
- 【暑假】[实用数据结构]UVa11995 I Can Guess the Data Structure!
- <;Araxis Merge>;Windows平台下的Merge概览
- ESXI安装
- Fast Intro To Java Programming (1)
- Codevs No.3147 矩阵乘法2
- Yii CModel中rules验证规则
- JavaFx版本植物大战僵尸
- fx-experience-tools
- 快速切换目录软件推荐——autojump
- POJ 1251 &;&; HDU 1301	 Jungle Roads (最小生成树)