zoukankan      html  css  js  c++  java
  • hdu 1080 Human Gene Functions(DP)

    题意:

    人类基因由A、C、G、T组成。

    有一张5*5的基因表。每格有一个值,叫相似度。例:A-C:-3。意思是如果A和C配对, 则它俩的相似度是-3【P.S.:-和-没有相似度,即-和-不能配对】

    现在给两条基因片段。(长度不一定相等)

    现在你要在两条基因片段中插入若干个-(空白基因),使得两个基因片段长度相等,且得到的整体相似度的值最大。【再次P.S.:-和-不能配对】

    思路:

    因为-和-不能匹配,所以插入的-的个数是有限的。

    str1的第一个基因可以与str1的第一个或-配对。然后,,,,很快就看到了DP结构,,,

    和最长公共子串一样滴的意思,,,

    DP方程:dp[i][j]:str1的前i个和str2的前j个能获得的最大相似度值。

    看代码,,

    代码:

    int l1,l2;
    char s1[105], s2[105];
    int S1[105], S2[105];
    int a[6][6]={{5,-1,-2,-1,-3},{-1,5,-3,-2,-4},{-2,-3,5,-2,-2},{-1,-2,-2,5,-1},{-3,-4,-2,-1,inf}};
    int dp[105][105];
    
    
    int maxx(int a,int b,int c){
        int t=max(a,b);
        return max(t,c);
    }
    
    
    int main(){
    
        int T;
        cin>>T;
        while(T--){
            scanf("%d",&l1);
            scanf("%s",s1);
            scanf("%d",&l2);
            scanf("%s",s2);
            rep(i,0,l1-1){
                if(s1[i]=='A') S1[i]=0;
                else if(s1[i]=='C') S1[i]=1;
                else if(s1[i]=='G') S1[i]=2;
                else S1[i]=3;
            }
            rep(i,0,l2-1){
                if(s2[i]=='A') S2[i]=0;
                else if(s2[i]=='C') S2[i]=1;
                else if(s2[i]=='G') S2[i]=2;
                else S2[i]=3;
            }
    
            dp[0][0]=0;
            rep(i,0,l2-1){
                dp[0][i+1]=dp[0][i]+a[4][S2[i]];
            }
            rep(i,0,l1-1){
                dp[i+1][0]=dp[i][0]+a[S1[i]][4];
            }
            rep(i,1,l1){
                rep(j,1,l2){
                    dp[i][j]=maxx( dp[i-1][j-1]+a[S1[i-1]][S2[j-1]],dp[i-1][j]+a[S1[i-1]][4],dp[i][j-1]+a[4][S2[j-1]] );
                }
            }
            printf("%d
    ",dp[l1][l2]);
        }
    
        return 0;
    }
  • 相关阅读:
    Spring的IOC容器学习笔记
    全球疫情可视化展示
    GitHub-暂存区与版本回退
    GitHub-创建仓库与本地同步
    Shell脚本常用模板
    Shell按行读取文件的3种方法
    shell脚本:通过域名获取证书的过期时间
    如何禁止chrome浏览器http自动转成https 【转】
    kafka_2.11-2.0.0_常用操作
    kafka_2.11-2.0.0_安装部署
  • 原文地址:https://www.cnblogs.com/fish7/p/4248001.html
Copyright © 2011-2022 走看看