zoukankan      html  css  js  c++  java
  • luogu1140相似基因

    题面

    • 有可能最大值是负数,要初始化f为极小值
    • 要特别处理第一位与空格匹配的情况
    • 分清i,j(wa了无数次QAQ)
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e6+5;
     4 const int INF=1e9+7;
     5 int v[6][6]
     6 {
     7     {0,0,0,0,0,0},
     8     {0,5,-1,-2,-1,-3},
     9     {0,-1,5,-3,-2,-4},
    10     {0,-2,-3,5,-2,-2},
    11     {0,-1,-2,-2,5,-1},
    12     {0,-3,-4,-2,-1,0},    
    13 };
    14 int n,m,a[105],b[105];
    15 char cha;
    16 int f[205][205];
    17 template <class t>void red(t &x)
    18 {
    19     x=0;
    20     int w=1;
    21     char ch=getchar();
    22     while(ch<'0'||ch>'9')
    23     {
    24         if(ch=='-')
    25             w=-1;
    26         ch=getchar();
    27     }
    28     while(ch>='0'&&ch<='9')
    29     {
    30         x=(x<<3)+(x<<1)+ch-'0';
    31         ch=getchar();
    32     }
    33     x*=w;
    34 }
    35 void input()
    36 {
    37     freopen("input.txt","r",stdin);
    38 }
    39 void read()
    40 {
    41     red(n);
    42     for(int i=1;i<=n;++i)
    43     {
    44         cha=getchar();
    45         if(cha=='A')
    46             a[i]=1;
    47         if(cha=='C')
    48             a[i]=2;
    49         if(cha=='G')
    50             a[i]=3;
    51         if(cha=='T')
    52             a[i]=4;
    53     }
    54     red(m);
    55     for(int i=1;i<=m;++i)
    56     {
    57         cha=getchar();
    58         if(cha=='A')
    59             b[i]=1;
    60         if(cha=='C')
    61             b[i]=2;
    62         if(cha=='G')
    63             b[i]=3;
    64         if(cha=='T')
    65             b[i]=4;
    66     }
    67 }
    68 void work()
    69 {
    70     for(int i=1;i<=n;++i)
    71         for(int j=1;j<=m;++j)
    72             f[i][j]=-INF;
    73     for(int i=1;i<=n;++i)
    74         f[i][0]=f[i-1][0]+v[a[i]][5];
    75     for(int i=1;i<=m;++i)
    76         f[0][i]=f[0][i-1]+v[5][b[i]];        
    77     for(int i=1;i<=n;++i)
    78         for(int j=1;j<=m;++j)
    79             f[i][j]=max(f[i][j],max(f[i-1][j-1]+v[a[i]][b[j]],max(f[i-1][j]+v[a[i]][5],f[i][j-1]+v[5][b[j]])));
    80     printf("%d",f[n][m]);
    81 }
    82 int main()
    83 {
    84     input();
    85     read();
    86     work();
    87     return 0;
    88 }
    View Code
  • 相关阅读:
    2.Android之按钮Button和编辑框EditText学习
    《DSP using MATLAB》Problem 3.8
    《DSP using MATLAB》Problem 3.7
    《DSP using MATLAB》Problem 3.6
    《DSP using MATLAB》Problem 3.5
    《DSP using MATLAB》Problem 3.4
    《DSP using MATLAB》Problem 3.3
    《DSP using MATLAB》Problem 3.2
    《DSP using MATLAB》Problem 3.1
    《DSP using MATLAB》Problem 2.20
  • 原文地址:https://www.cnblogs.com/Achensy/p/10778025.html
Copyright © 2011-2022 走看看