zoukankan      html  css  js  c++  java
  • P1140 相似基因 最长公共子序列

    思路 类似于最长公共子序列 把一段基因和另外一段基因匹配  不够长的用空基因替换

    #include<bits/stdc++.h>
    using namespace std;
    const int INF=10000000;
    int dp[10000][10000];
    const int tab[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 la,lb;
    char sa[10000],sb[10000];
    int a[10000],b[10000];
    int main(){
        cin>>la>>sa>>lb>>sb;
        for(int i=1;i<=la;i++)
            for(int j=1;j<=lb;j++)
                dp[i][j]=-INF;
        for(int i=1;i<=la;i++){
            if(sa[i-1]=='A')a[i]=0;
            if(sa[i-1]=='C')a[i]=1;
            if(sa[i-1]=='G')a[i]=2;
            if(sa[i-1]=='T')a[i]=3;
        }
            for(int i=1;i<=lb;i++){
            if(sb[i-1]=='A')b[i]=0;
            if(sb[i-1]=='C')b[i]=1;
            if(sb[i-1]=='G')b[i]=2;
            if(sb[i-1]=='T')b[i]=3;
        }
        for(int i=1;i<=la;i++)dp[i][0]=dp[i-1][0]+tab[a[i]][4];
        for(int i=1;i<=lb;i++)dp[0][i]=dp[0][i-1]+tab[b[i]][4];
        for(int i=1;i<=la;i++){
            for(int j=1;j<=lb;j++){
                dp[i][j]=max(dp[i][j],dp[i][j-1]+tab[b[j]][4]);
                dp[i][j]=max(dp[i][j],dp[i-1][j]+tab[a[i]][4]);
                dp[i][j]=max(dp[i][j],dp[i-1][j-1]+tab[a[i]][b[j]]);
            }
        }
        cout<<dp[la][lb]<<endl;
    
        return 0;
    }
    

      

  • 相关阅读:
    JavaScript中的this相关
    Git进阶操作_1
    Git基本操作_5
    Git基本操作_4
    Git基本操作_3
    Git基本操作_2
    利用Python发送SMTP邮件
    Python JWT使用
    Python中的Asyncio 异步编程
    Python中的抽象类和接口类
  • 原文地址:https://www.cnblogs.com/ttttttttrx/p/9885934.html
Copyright © 2011-2022 走看看