zoj1027 Human Gene Functions

  1. //zoj1027 Human Gene Functions
  2. //Accepted 1027 C ++ 00:00.00 880K
  3. #include <cstdio>
  4. #include <iostream>
  5. using namespace std;
  6. #define MAXN 101
  7. int max(int a,int b){return a>b?a:b;}
  8. int max3(int a,int b,int c){return max(max(a,b),max(b,c));}
  9. const int score[5][5]={
  10.        {5,-1,-2,-1,-3},
  11.        {-1,5,-3,-2,-4},
  12.        {-2,-3,5,-2,-2},
  13.        {-1,-2,-2,5,-1},
  14.        {-3,-4,-2,-1,0}
  15. };
  16. int key(char c){
  17.        if (c=='A') return 0;
  18.        if (c=='C') return 1;
  19.        if (c=='G') return 2;
  20.        if (c=='T') return 3;
  21.        return 4;
  22. }
  23. void solve()
  24. {
  25.        int i,j,len1,len2;
  26.        char dna[MAXN];
  27.        int s1[MAXN],s2[MAXN],f[MAXN][MAXN];
  28.        cin >> len1 >> dna;
  29.        for (i=0; i<len1; ++i) s1[i] = key(dna[i]);
  30.        cin >> len2 >> dna;
  31.        for (i=0; i<len2; ++i) s2[i] = key(dna[i]);
  32.        f[0][0] = 0;
  33.        for (i=1; i<=len1; ++i) f[i][0] = f[i-1][0]+score[s1[i-1]][4];
  34.        for (i=1; i<=len2; ++i) f[0][i] = f[0][i-1]+score[4][s2[i-1]];
  35.        for (i=1; i<=len1; ++i)
  36.               for (j=1; j<=len2; ++j)
  37.                      f[i][j] = max3(f[i-1][j]+score[s1[i-1]][4], f[i][j-1]+score[4][s2[j-1]], f[i-1][j-1]+score[s1[i-1]][s2[j-1]]);
  38.        cout << f[len1][len2] << endl;
  39. }
  40.  
  41. int main()
  42. {
  43. #ifndef ONLINE_JUDGE
  44.        freopen("1027.txt","r",stdin);
  45. #endif
  46.        int t;
  47.        while (scanf("%d",&t)!=EOF)
  48.               while (t--)
  49.                      solve();
  50. #ifndef ONLINE_JUDGE
  51.        fclose(stdin);
  52. #endif
  53.        return 0;
  54. } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值