• BZOJ_2764_[JLOI2011]基因补全_DP_高精度


    BZOJ_2764_[JLOI2011]基因补全_DP_高精度

    Description

    在生物课中我们学过,碱基组成了DNA(脱氧核糖核酸),他们分别可以用大写字母A,C,T,G表示,其中A总与T配对,C总与G配对。两个碱基序列能相互匹配,当且仅当它们等长,并且任意相同位置的碱基都是能相互配对的。例如ACGTC能且仅能与TGCAG配对。一个相对短的碱基序列能通过往该序列中任意位置补足碱基来与一个相对长的碱基序列配对。补全碱基的位置、数量不同,都将视为不同的补全方案。现在有两串碱基序列S和T,分别有n和m个碱基(n>=m),问一共有多少种补全方案。
     

    Input

    数据包括三行。
    第一行有两个整数n,m,表示碱基序列的长度。
    第二行包含n个字符,表示碱基序列S。
    第三行包含m个字符,表示碱基序列T。
    两个碱基序列的字符种类只有A,C,G,T这4个大写字母

    Output

    答案只包含一行,表示补全方案的个数。

    Sample Input

    10 3
    CTAGTAGAAG
    TCC

    Sample Output

    4

    设f[i]表示匹配到序列T的第i个字符的方案数。
    然后对S的每一位倒序枚举T,如果匹配到就F[j]+=F[j-1]。
    需要高精度加法。
     
    代码:
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    #define N 2050
    #define mod 100000000
    int n,m;
    char s[N],w[N];
    struct Big {
        int a[250],len;
        Big() {memset(a,0,sizeof(a)); len=0;}
        Big operator + (const Big &x) const {
            Big re; int l=max(len,x.len),jin=0,i;
            for(i=1;i<=l;i++) {
                int tmp=a[i]+x.a[i]+jin;
                jin=tmp/mod; re.a[i]=tmp%mod;
            }
            if(jin) l++;
            re.len=l; re.a[l]+=jin;
            return re;
        }
        void output() {
            printf("%d",a[len]);
            int i;
            for(i=len-1;i;i--) printf("%08d",a[i]);
        }
    }f[N];
    bool check(int i,int j) {
        return (s[i]=='T'&&w[j]=='A')||(s[i]=='A'&&w[j]=='T')||(s[i]=='C'&&w[j]=='G')||(s[i]=='G'&&w[j]=='C');
    }
    int main() {
        scanf("%d%d%s%s",&n,&m,s+1,w+1);
        int i,j; f[0].len=f[0].a[1]=1;
        for(i=1;i<=m;i++) f[i].len=1;
        for(i=1;i<=n;i++) {
            for(j=m;j;j--) {
                if(check(i,j)) f[j]=f[j]+f[j-1];
            }
        }
        f[m].output();
    }
    
  • 相关阅读:
    项目管理工具Redmine各功能测试
    TestLink学习八:TestLink1.9.13与Mantis1.2.19集成
    TestLink学习七:TestLink测试用例Excel转换XML工具
    Mantis1.2.19 在Windows 平台上的安装配置详解
    TestLink学习六:TestLink1.9.13工作使用小结
    TestLink学习五:TestLink1.9.13和JIRA6.3.6的集成
    TestLink学习四:TestLink1.9.13使用说明
    TestLink学习三:发送邮件的两种配置方法
    网页太长怎么截图?
    JIRA学习一:Windows下安装破解JIRA6.3.6
  • 原文地址:https://www.cnblogs.com/suika/p/9062816.html
Copyright © 2020-2023  润新知