基因重组

1s / 32M

【问题描述】
目前,科学家们正致力于对生物基因的重组进行深入研究。基因的物质载体是脱氧核糖
核酸(DNA)
。DNA 是一种仅由 A、T、G、C 四种基元构成的双螺旋结构的有机分子。
DNA 的两条单链上,同一位置的两个基元是互相对应的。A 对 T,G 对 C,因此,我们
只需用任意一条链上的基元排列,就可以表示 DNA 的分子结构。例如:ATTGAGCCGTAT。
由于 DNA 微小而复杂,重组 DNA 极其困难,科学家们打算利用一条现成的 DNA 链作原
材料拼接成另外一条新的 DNA 链。即使这样,拼接 DNA 仍然是一件繁重的工作,非人力所
能胜任。所以科学家们制造了一种手术机器人 TuringM 来完成这项任务。TuringM 每次只能
在目标链(T)的右端与原材料 (S) 的左端进行操作。它有下列几种基本拼接操作:

对于每种操作,机器人的单位时间耗费如上表所示(单位:分钟)
。最后剩余的原材料
自动丢弃。现在的任务是请你编一个程序,帮助科学家们找出完成 DNA 链拼接的最少时间。
从 S 的左端切下
一段(一对或多
对)直接或上下
翻转后拼接到 T
的右端上
【输入格式】
输入文件包括三行,第一行是三个数 c1、c2、c3。
二、三两行每行一个字符串,分别表示原材料 DNA 与目标 DNA 链的上半部分。
【输出格式】
输出文件只有一行,表示拼接出目标 DNA 的最小时间。
【输入输出样例】
3 2 3
CCGATGTATCTG
TACGATCGGTC

输出

23
【数据规模】
DNA 链的长度不超过 5000
最少时间不会超过 10 天。

令f[i][j][0/1]表示原材料消除j个,目标构成i个

最后一次是1操作(0/1对应正反)

f[i][j][2]表示最后一次是2操作

f[i][j][3]表示最后一次是3操作

于是有:

f[i+1][j][3]=min(f[i][j][0~3])+c3     (给结果材料加一位)

f[i][j+1][2]=min(f[i][j][2],min(f[i][j][0,1,3])+c2)

(删掉一位原材料,前一个表示把这次操作和上一个2操作合并)

f[i+1][j+1][0/1]=min(f[i][j][0/1],min(f[i][j][0~3])+c1)

(表示删掉一位原材料,加入结果材料,要求必须原材料j位和目标材料i位要匹配)

初始化直接f[0][0][3]就行了,因为3操作只能加一位,不能与前面的3合并

所以就相当于初始无操作

内存不够,要滚动数组

%%%%%%YZD巨佬

 1 #include<iostream>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cstdio>
 5 #include<cmath>
 6 using namespace std;
 7 int a1[5005],a2[5005],f[2][5005][5],c1,c2,c3,now,nxt,n,m,inf,ans;
 8 char s[5005];
 9 int main()
10 {int i,j;
11   cin>>c1>>c2>>c3;
12   cin>>s;
13   m=strlen(s);
14   for (i=0;i<m;i++)
15     if (s[i]=='A') a1[i+1]=0;
16     else if (s[i]=='T') a1[i+1]=1;
17     else if (s[i]=='C') a1[i+1]=2;
18     else if (s[i]=='G') a1[i+1]=3;
19   cin>>s;
20   n=strlen(s);
21   for (i=0;i<n;i++)
22     if (s[i]=='A') a2[i+1]=0;
23     else if (s[i]=='T') a2[i+1]=1;
24     else if (s[i]=='C') a2[i+1]=2;
25     else if (s[i]=='G') a2[i+1]=3;
26   now=0;nxt=1;
27   memset(f,127/3,sizeof(f));
28   inf=f[0][0][0];
29   f[0][0][3]=0;
30   now=0;nxt=1;
31   for (i=0;i<n;i++)
32     {
33       for (j=0;j<=m;j++)
34     {
35       f[nxt][j][3]=min(f[nxt][j][3],min(min(f[now][j][0],f[now][j][1]),min(f[now][j][2],f[now][j][3]))+c3);
36       if (j!=m)
37         f[now][j+1][2]=min(min(f[now][j+1][2],f[now][j][2]),min(min(f[now][j][1],f[now][j][0]),f[now][j][3])+c2);
38       if (j!=m&&a1[j+1]==a2[i+1])
39         {
40           f[nxt][j+1][0]=min(min(f[nxt][j+1][0],f[now][j][0]),min(min(f[now][j][1],f[now][j][2]),f[now][j][3])+c1);
41         }
42       if (j!=m&&((a2[i+1]^1)==a1[j+1]))
43         {
44           f[nxt][j+1][1]=min(min(f[nxt][j+1][1],f[now][j][1]),min(min(f[now][j][0],f[now][j][2]),f[now][j][3])+c1);
45         }
46     }
47       memset(f[now],127/3,sizeof(f[now]));
48       swap(now,nxt);
49     }
50   ans=inf;
51   for (i=0;i<=m;i++)
52     ans=min(ans,min(min(f[now][i][0],f[now][i][1]),min(f[now][i][2],f[now][i][3])));
53   cout<<ans;
54 }

 

转载于:https://www.cnblogs.com/Y-E-T-I/p/7730009.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu下apache2启动、停止、重启、配置

Linux系统为Ubuntu 一、Start Apache 2 Server /启动apache服务 # /etc/init.d/apache2 start or $ sudo /etc/init.d/apache2 start 二、 Restart Apache 2 Server /重启apache服务 # /etc/init.d/apache2 restart or $ sudo /etc/init.d/apache2 restart 三、Stop Apache 2 …

day6笔记

一、上节回顾 list&#xff1a;li [1,2,3,5,a]增加&#xff1a;append&#xff1a;末尾加入追加 insert&#xff1a;插入&#xff0c;在任意位置&#xff0c;insert&#xff08;index,内容&#xff09; extend:迭代着加入&#xff0c;asc ----> ‘a’,‘s’,‘c’ [1,2,3] …

Android手游《》斗地主完整的源代码(支持单机和网络对战)

Android手游《斗地主》完整的源代码&#xff08;支持单机和网络对战&#xff09;下载。一个很不错的源代码。斗地主掌游是一个独特的国内社会斗地主棋牌游戏&#xff0c;之后玩家可以下载网上斗地主和全世界。掌游斗地主特点&#xff1a;1、只有一个主要的社会斗地主棋牌游戏。…

昨天的补给

2014-04-22 09:37 昨天主要改变了之前的布局。采用的是单选按钮。避免逻辑上需要判断。 2014-04-22 09:38 晚上给媳妇买了奶茶和德芙&#xff0c;她很开心。网易订购的项链到了&#xff0c;就是定制的文字多了&#xff0c;不是太好看。 转载于:https://www.cnblogs.com/jsRunne…

jQuery判断当前点击的是第几个li的代码

使用$(this).index()取得li的下标&#xff0c;下面是一个样式替换的例子&#xff1a; $("#aa li").click(function(){ $("#aa li").removeClass("class名字&#xff0c;多个class用空格分开"); $(this).addClass("class名字&#xff0c;多个…

条款46:需要类型转换的时候请为模板定义非成员函数

看看下面这个例子&#xff1a; 1 template<typename T>2 class Rational{3 public:4 Rational(const T & numerator, const T & denominator);5 const T numerator()const;6 const T denominator() const;7 };8 template<typename T>9 const R…

Wordpress菜单函数wp_nav_menu各参数详解及示例

https://blog.csdn.net/qq_37296622/article/details/82633833 注册菜单 首先要注册菜单&#xff0c;将以下函数添加至function.php函数里 register_nav_menus(array( PrimaryMenu>导航, friendlinks>友情链接, footer_nav>页脚导航)); add_theme_support(nav_menus)…

page对象

page对象指的是页面本身 查看当前page对象的字符串描述 转载于:https://www.cnblogs.com/liuliuyiming/p/7731704.html

Memcached总结三:Memcached常用命令及使用说明

一、存储命令 存储命令的格式&#xff1a; 12<command name> <key> <flags> <exptime> <bytes><data block>参数说明如下&#xff1a; <command name>set/add/replace<key>查找关键字<flags>客户机使用它存储关于键值对…

mysql.zip免安装版配置

MYSQL ZIP免安装版配置 1. 下载MySQL 选择自己想要的.本次安装.我使用的是mysql-5.6.17-winx64 地址:http://dev.mysql.com/downloads/mysql/ 2. 解压zip 文件. 在mysql 的根目录下找到 my-default.ini 复制出一个 my.ini 文件, 根据你需要的位置修改 my.ini 文件 a&#xf…

Html中CSS之去除li前面的小黑点,和ul、LI部分属性方法

https://blog.csdn.net/business122/article/details/7973638 <style type"text/css"> list-style:none; </style>

Day3:集合

一、集合的定义及特性 1.集合的特性 1.1 去重&#xff0c;把一个列表变成集合&#xff0c;就自动去重了 1.2 关系测试&#xff0c;测试两组数据之间的交集、差集等关系 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan list_1 [1,3,5,9,7,5,4] set_1 …

解决SQL命令行回退的问题

场景 在linux或者aix上安装后Oracle后&#xff0c;在SQL命令行下无法通过键盘的退格键回退&#xff0c;如下 解决方法 安装软件 # rpm -ivh rlwrap-0.41-1.el6.x86_64.rpm warning: rlwrap-0.41-1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEYPrep…

p740备件号

http://www.gzyuxing.net/machine/show-113.htmlhttp://www.fuyuanit.cn/index.php?mProduct&ashow&id258http://www.fuyuanit.cn/index.php?mProduct&ashow&id258扩展柜如何确定:标签上一般有字样&#xff0c;到ibm knowledge center搜索关键字 5877 parts即…

Android listview addHeaderView 和 addFooterView 详解

addHeaderView()方法&#xff1a;主要是向listView的头部添加布局addFooterView()方法&#xff1a;主要是向listView的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添加&#xff0c;而不能直接添加父容器中的子控件。例如&#xff1a;从一个xml布局文件中添加…

python教程--__init_.py的作用

__init__.py 的作用 python的每个模块的包中&#xff0c;都有一个__init__.py文件&#xff0c;有了这个文件&#xff0c;我们才能导入这个目录下的module。那么&#xff0c;__init__.py还有什么别的功能呢&#xff1f;其实&#xff0c;__init__.py里面还是可以有内容的&#xf…

在HTML中怎么去掉超链接的下划线?

<style type"text/css">a {text-decoration: none}</style> https://zhidao.baidu.com/question/253614370.html

ASP.NET AJAX Timer Trouble? Location is key.

If you’ve made much use of the ASP.NET AJAX Timer control, you may have noticed that it can behave somewhat unexpectedly. In this post, I’m going to take a closer look at how the Timer works and the most significant factor that influences it: Location.…

linq 分组求和的一般方法

//var query from d in expenseApplyModel.ApplyBillList.AsEnumerable() // group d by d.ExpenseItemID into g // select new // { // ExpenseItemID g.Key, // ExpenseAmount g.Sum(t > t.ExpenseAmount) // };//分组求和新添加的费用项目 var query expenseApplyMo…

在屏幕上打印杨辉三角

这就是杨辉三角&#xff0c;也叫贾宪三角。这于我们现在的学习联系最紧密的是2项式乘方展开式的系数规律。如图&#xff0c;在贾宪三角中&#xff0c;第3行的第三个数恰好对应着两数和的平方公式依次下去。 杨辉三角是一个由数字排列成的三角形数表&#xff0c;一般形式如下&am…