基因匹配问题

原创 2012年03月22日 19:45:11

就是dp, 数据处理的时候要注意。而且状态转换用了只用了一个sim[2][m],节省了空间。再者就是转换的时候有权值,加上权值比较即可。

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
char weight[5][5] = 
{
  {5,-1,-2,-1,-3},
  {-1,5,-3,-2,-4},
  {-2,-3,5,-2,-2},
  {-1,-2,-2,5,-1},
  {-3,-4,-2,-1,0},
};
int LenA, LenB, i, j;
int sum;
bool Cur;
char F[256];
char Str[101];
char GeneA[101], GeneB[101];
short sim[2][101];
inline short max(short A, short B)
{
  return A > B ? A:B;
} 
int main()
{
    F['A'] = 0; F['C'] = 1; F['G'] = 2; F['T'] = 3;
    scanf("%d",&sum);
    while(sum--)
    {
       scanf("%d %s",&LenA, &Str); 
       for(i=0; i<LenA; i++)
       GeneA[i+1] = F[Str[i]];
       scanf("%d %s", &LenB,&Str);
       for(i=0; i<LenB; i++)
       GeneB[i+1] = F[Str[i]];
       sim[0][0] = 0;
       for(j=1; j<=LenB; j++)
       sim[0][j] = sim[0][j-1] + weight[4][GeneB[j]];
       for(i=1, Cur=1; i<=LenA; i++,Cur =!Cur)
       {
         sim[Cur][0] = sim[!Cur][0] + weight[GeneA[i]][4];
         for(j=1; j<=LenB; j++)
         {
           sim[Cur][j] = sim[!Cur][j-1] + weight[GeneA[i]][GeneB[j]];
           sim[Cur][j] = max(sim[Cur][j], sim[Cur][j-1] + weight[4][GeneB[j]]);
           sim[Cur][j] = max(sim[Cur][j], sim[!Cur][j] + weight[GeneA[i]][4]);
         }
       }
       printf("%d\n", sim[!Cur][LenB]);
    } 
   system("pause");
   return 0;
}


基因算法介绍

生物只有经过许多世代的不断进化(evolution,演化),才能更好地完成生存与繁衍的任务。遗传算法也遵循同样的方式,需要随着时间的推移不断成长、演化,最后才能收敛,得到针对某类特定问题的一个或多个解...
  • hunhun1122
  • hunhun1122
  • 2016年09月07日 11:32
  • 824

LCS变形+基因匹配问题(1080)

Human Gene Functions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth...
  • qq_33765907
  • qq_33765907
  • 2016年03月05日 19:26
  • 100

字符串匹配之二:DNA序列匹配度的计算

使用Python计算,以及统计方法,证明了人类的致盲基因和果蝇的致盲基因来自于同一祖先。从某种程度上来说,人类和果蝇来自于同一祖先...
  • gt11799
  • gt11799
  • 2014年10月17日 23:06
  • 1508

Self-Learning Gene Expression Programming——自学习基因表达式编程

Self-Learning Gene Expression Programming——自学习基因表达式编程
  • hsj970319
  • hsj970319
  • 2017年04月15日 00:38
  • 812

noi.openjudge.cn 2705括号匹配问题

2705:扩号匹配问题 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述在某个字符串(长度不超过100)中有左括号、右括号和大小写字...
  • qq_25734657
  • qq_25734657
  • 2016年08月25日 13:39
  • 416

如何获取一个基因家族的所有小麦基因

如何获取一个基因家族的所有小麦基因昨天有同学问我如何获得谷子中一个基因家族的所有基因。谷子已经测过序,获得起来还是比较简单。想要获得一个基因组家族的所有基因,方法很多。比方说,IWGSCv1.0的基因...
  • msw521sg
  • msw521sg
  • 2017年08月03日 09:43
  • 633

括号匹配问题,用栈实现

用栈实现括号匹配其实是一个很简单的问题,思路在代码注释里面写的很清楚了,只是接口设置的好像不太好。 如果在main里面设置的str不是动态分布的,在linux下就会出错,不知道windows会不会出问...
  • guang_jing
  • guang_jing
  • 2014年05月06日 14:31
  • 2338

从基因来看腾讯

经常在网上看到大家在谈腾讯,而且大部分都是负面的,一会儿说腾讯抄别人东西,一会儿又说腾讯打压小公司,但基本看到的都是抱怨,没人分析过其中原因,当然,商业因素也是其中之一,但我要谈的不是这个,最近在看一...
  • cldsj
  • cldsj
  • 2012年04月08日 23:40
  • 16185

基因数据压缩算法(ACTG) C++

基因数据压缩算法是一个初级的数据压缩算法,基因数据如下所示"ATAGATGCAT",如果使用标准的ASCII编码(每个字符1个字节),这个基因字符串的流长度是10*8=80位。         这些...
  • u012796139
  • u012796139
  • 2015年09月14日 16:14
  • 1113

一、动态规划(1)相似基因

相似基因 源程序名 GENE.??? (PAS, C, CPP) 可执行文件名 GENE.EXE 输入文件名 GENE.IN 输出文件名 GENE.OUT 大家都知道,基因可以看作一个碱基对...
  • BOYxiejunBOY
  • BOYxiejunBOY
  • 2015年07月14日 12:13
  • 551
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基因匹配问题
举报原因:
原因补充:

(最多只允许输入30个字)