DNA合成

DNA分子是以4种脱氧核苷酸为单位连接而成的长链,这4种脱氧核苷酸分别含有A,T,C,G四种碱基。碱基互补配对原则:A和T是配对的,C和G是配对的。如果两条碱基链长度是相同的并且每个位置的碱基是配对的,那么他们就可以配对合成为DNA的双螺旋结构。现在给出两条碱基链,允许在其中一条上做替换操作:把序列上的某个位置的碱基更换为另外一种碱基。问最少需要多少次让两条碱基链配对成功


输入描述:
输入包括一行: 包括两个字符串,分别表示两条链,两个字符串长度相同且长度均小于等于50。

输出描述:
输出一个整数,即最少需要多少次让两条碱基链配对成功

输入例子1:
ACGT TGCA

输出例子1:
0

算法:动态规划
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool issame(char a, char b){
    return abs((a-'0')-(b-'0'))==19||abs((a-'0')-(b-'0'))==4;
}
int dp(string& s, string& t){
    int n=s.size();
    vector<vector<int>>f(n+1,vector<int>(n+1));
    for(int i=0;i<=n;i++)f[0][i]=i,f[i][0]=i;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
            f[i][j]=f[i-1][j-1]+(!issame(s[i-1],t[j-1]));
        }
    return f[n][n];
}
int main(void){

    string s,t;
    cin>>s>>t;
    int n=s.size();
    cout<<dp(s,t)<<endl;

    return 0;
}

 



posted @ 2019-07-15 16:36  YF-1994  阅读(896)  评论(0编辑  收藏  举报