基因重组

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,一经查实,立即删除!

相关文章

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、只有一个主要的社会斗地主棋牌游戏。…

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>客户机使用它存储关于键值对…

解决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…

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.…

在屏幕上打印杨辉三角

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

对SPA(单页面应用)的总结

目录 1、单页面应用&#xff08;SPA&#xff09;的概念&#xff1a;2、作用&#xff08;好处&#xff09;3、缺点4、实现SPA1、单页面应用&#xff08;SPA&#xff09;的概念&#xff1a; 1、single-page application是一种特殊的Web应用。它将所有的活动局限于一个Web页面中&a…

SpringSecurity6 | 失败后的跳转

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏: MySQL学习 🥭本文内容: SpringSecurity6 | 失败后的跳转 📚个人知识库: Leo知识库,欢迎大家访问 学习…

[Android]AndroidBucket增加碎片SubLayout功能及AISubLayout的注解支持

以下内容为原创&#xff0c;转载请注明&#xff1a; 来自天天博客&#xff1a;http://www.cnblogs.com/tiantianbyconan/p/3709957.html 之前写过一篇博客&#xff0c;是使用Fragment来实现TabHost的效果&#xff0c;并且模拟TabHost的切换各个fragment生命周期的调用&#xff…

WordPress 获取当前页面 ID 的几大方法

https://zhangzifan.com/wordpress-get-id.html 在很多的 WordPress 主题或者插件功能的开发中&#xff0c;我们总是需要获取到 WordPress 给每个页面定义的 ID&#xff0c;不然也某些情况下是无法确定这是哪一个页面&#xff0c;针对于文章或者页面的 ID 获取基本可以使用 get…

王者荣耀交流协会第四次Scrum立会

拍照的是王磊同学&#xff0c;没有出镜。 开会时间&#xff1a;2017年10月30日下午18&#xff1a;45-19&#xff1a;16 共计31分钟 开会地点&#xff1a;一食堂二楼靠近窗户倒数第四排 今日完成工作进度&#xff1a; 袁玥同学完成了点击按钮刷新时间的功能代码&#xff1b; 王…

Python在信号与系统(1)——Hilbert兑换,Hilbert在国家统计局的包络检测应用,FIR_LPF滤波器设计,格鲁吉亚也迫使高FM(PM)调制...

谢谢董老师&#xff0c;董老师是个好老师。 心情久久不能平静&#xff0c;主要是高频这门课的分析方法实在是让我难以理解&#xff0c;公式也背只是&#xff0c;还是放放吧。 近期厌恶了Matlab臃肿的体积和频繁的读写对我的Mac的损害&#xff0c;所以学习了一下Python这一轻量级…

如何在WP-Config中设置WordPress错误日志

https://baijiahao.baidu.com/s?id1622279671500148245&wfrspider&forpc 你想在wp-config文件中设置WordPress错误日志吗&#xff1f;WordPress中的wp-config文件不仅控制您的WordPress网站设置&#xff0c;它也是一个非常有用的调试工具&#xff0c;可帮助您查找和修…

wordpress启用侧边栏小工具

http://www.seo628.com/1872.html wordpress后台默认不显示小工具选项&#xff0c;开发者需要启用小工具功能并把小工具在相应的前台位置调用出来&#xff0c;这样才能在后台直接拖动生成侧边栏。 激活小工具 激活小工具需要在functions.php中注册至少一个侧边栏 register_s…

详解 Spotlight on MySQL监控MySQL服务器

前一章详解了Spotlight on Unix 监控Linux服务器 &#xff0c;今天再来看看Spotlight on MySQL怎么监控MySQL服务器。 注&#xff1a;http://www.cnblogs.com/Javame/p/3685512.html 第一步: 下载并安装mysql-connector-3.5x Spotlight on MySQL 连接mysql必须使用mysql-connec…

lua------------------Unity3D研究院编辑器之打开unity不可识别的文件(十三)

Unity3D研究院编辑器之打开unity不可识别的文件&#xff08;十三&#xff09; 雨松MOMO 【Unity3D拓展编辑器】 围观8597次 9 条评论 编辑日期&#xff1a;2017-03-02 字体&#xff1a;大 中 小 有些特殊后缀名的文件在unity里是不可识别的。如下图所示&#xff0c;这里我把文本…

一起Polyfill系列:Function.prototype.bind的四个阶段

昨天边参考es5-shim边自己实现Function.prototype.bind&#xff0c;发现有不少以前忽视了的地方&#xff0c;这里就作为一个小总结吧。 一、Function.prototype.bind的作用 其实它就是用来静态绑定函数执行上下文的this属性&#xff0c;并且不随函数的调用方式而变化。 示例&am…

盘点18个免费的WordPress主题后台选项开发框架

https://yusi123.com/3205.html/3 13.Warp Framework Warp框架不仅支持WordPress和Joomla,还可以可扩展到其他的适用Web程序。使用Warp框架你可以轻松的定制你需要的功能。 该框架是来自Yootheme团队。看看他们出的主题&#xff0c;你就知道这个绝对是精品了。精心设计的界面和…

lua----------------使用VS2015搭建lua开发环境的一些侥幸成功经验,

所以本篇博文介绍在Windows平台下&#xff0c;使用VS2015搭建lua开发环境的一些侥幸成功经验&#xff0c;安装过程参考网上教程&#xff0c;安装过程如下&#xff08;参考http://www.byjth.com/lua/33.html&#xff09; 一 生成lua5.3.lib 1、下载并编译lua源码 首先进入lua官…