zoukankan      html  css  js  c++  java
  • HDU 1080 Human Gene Functions

    本题是一道DP问题,字符串匹配问题。有3种子问题。

    1.a[i]与'-'匹配;2.b[j]与'-'匹配;3.a[i]与b[j]匹配。

    所以状态转移方程有 dp[i][j]=max(dp[i-1][j-1]+dir[a[i]][b[j]],max(dp[i-1][j]+dir[a[i]][4],dp[i][j-1]+dir[b[j]][4]));

    如果无法理解,请参考算法导论关于DP的章节。

    注意初始化。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cmath>
     4 using namespace std;
     5 int dir[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,1}};
     6 string a_str;
     7 string b_str;
     8 int  a[100+10];
     9 int  b[100+10];
    10 int  dp[100+10][100+10];
    11 void change(string aa,int n,int bb[])     //将基因串转化为数字串,方便下面计算
    12 {
    13     for(int i=1;i<=n;++i)
    14     {
    15         if(aa[i-1]=='A') bb[i]=0;
    16         if(aa[i-1]=='C') bb[i]=1;
    17         if(aa[i-1]=='G') bb[i]=2;
    18         if(aa[i-1]=='T') bb[i]=3;
    19     }
    20     return;
    21 }
    22 int main()
    23 {
    24     int t,n,i,j,al,bl;
    25     while(cin>>t)
    26     {
    27         while(t--)
    28         {
    29             for(i=0;i<=100;++i)   //初始化
    30              memset(dp[i],0,sizeof(dp[i]));
    31 
    32             cin>>al>>a_str;
    33             cin>>bl>>b_str;
    34             change(a_str,al,a);   //将字符串转化为数字串
    35             change(b_str,bl,b);
    36 
    37             for(i=1;i<=al;++i)
    38             {
    39                 dp[i][0]=dir[a[i]][4]+dp[i-1][0];
    40             }
    41             for(i=1;i<=bl;++i)
    42             {
    43                 dp[0][i]=dir[b[i]][4]+dp[0][i-1];
    44             }
    45 
    46             for(i=1;i<=al;++i)
    47             {
    48                 for(j=1;j<=bl;++j)
    49                 {
    50                     dp[i][j]=max(dp[i-1][j-1]+dir[a[i]][b[j]],max(dp[i-1][j]+dir[a[i]][4],dp[i][j-1]+dir[b[j]][4]));
    51                 }
    52             }
    53             cout<<dp[al][bl]<<endl;
    54         }
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    古代汉语:含义“死”的归类
    Inesa 路由器登录信息
    调试第三方源码
    暑假作业日总结
    暑假作业日总结
    暑假作业日总结
    暑假作业日总结
    暑假作业日总结
    暑假作业:《大道至简》读后感
    暑假作业日总结
  • 原文地址:https://www.cnblogs.com/symons1992/p/2733246.html
Copyright © 2011-2022 走看看