首页 > 其他分享 >蛋白质序列

蛋白质序列

时间:2022-09-30 12:55:11浏览次数:47  
标签:string int s2 s1 dfs 序列 pre1 蛋白质

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e3+10,w1=2;
 4 
 5 int h[N][N];
 6 int x1,y1;
 7 string pre1,pre2;
 8 void dfs(int x,int y,string s1,string s2)
 9 {
10     if(h[x][y]==0) return;
11     if(s2[x]==s1[y])
12     {
13         pre1+=s1[y],pre2+=s2[x];
14         dfs(x-1,y-1,s1,s2);
15     }
16     else{
17         int a=h[x-1][y-1],b=h[x-1][y],c=h[x][y-1];
18         int maxv=max(a,max(b,c));
19         bool zs=0,up=0,z=0;
20         if(a==maxv) zs=1;
21         if(b==maxv) up=1;
22         if(c==maxv) z=1;
23         if(zs)
24         {
25         pre1+=s1[y],pre2+=s2[x];
26         dfs(x-1,y-1,s1,s2);
27         }
28         else if(up)
29         {
30             pre1+=s1[y],pre2+='_';
31             dfs(x-1,y,s1,s2);
32         }
33         else if(z)
34         {
35             pre1+='_',pre2+=s2[x];
36             dfs(x,y-1,s1,s2);
37         }
38     }
39 }
40 
41 double nsw(string s1,string s2)
42 {
43     
44     int m=s1.size(),n=s2.size();
45     
46     cout<<n<<' '<<m<<endl;
47     s1=" "+s1,s2=" "+s2;
48     int res=0;
49     for(int i=1;i<=n;i++)
50     for(int j=1;j<=m;j++)
51     {
52         int &x=h[i][j];
53         int t;
54         if(s1[j]==s2[i]) t=3;
55         else t=-3;
56         x=max(h[i-1][j-1]+t,max(h[i-1][j]-w1,max(h[i][j-1]-w1,0)));
57         if(res<x)
58         {
59             res=x;
60             x1=i,y1=j;
61         }
62     }
63     pre1="",pre2="";
64     dfs(x1,y1,s1,s2);
65     
66     reverse(pre1.begin(),pre1.end());
67     reverse(pre2.begin(),pre2.end());
68     
69     int cnt=0;
70     for(int i=0;i<pre1.size();i++)
71     if(pre1[i]==pre2[i]) cnt++;
72     
73     double ans=(cnt*1.0)/(sqrt(m*1.0)+sqrt(n*1.0));
74     
75     return ans;
76 }
77 int main()
78 {
79     string s1,s2;
80     printf("请输入第一个蛋白质序列: \n");
81     cin>>s1;
82     printf("请输入第二个蛋白质序列: \n");
83     cin>>s2;
84     
85     double ans=nsw(s1,s2);
86     ans+=nsw(s2,s1);
87     ans=ans/2.0;
88     
89     printf("这两个蛋白质的相似性为:\n");
90     printf("%.2f",ans);
91     return 0;
92 }

 

标签:string,int,s2,s1,dfs,序列,pre1,蛋白质
From: https://www.cnblogs.com/tolter/p/16744577.html

相关文章

  • 【code基础】判断数组中每个元素前递增序列子序列的最大长度
    这是力扣刷题中很经典的一个套路,类似有:以下标i为标准,其之前最长的非递增序列的个数以下标i为标准,其之后的最长非递减序列的个数//以下标i为标准,其之前最长的非递增......
  • Python实验报告——第4章 序列的应用
    实验报告实例01:输出每日一贴代码如下:importdatetime#导入日期时间类#定义一个时间表mot=['今天星期一:\n坚持下去不是因为我很强,而是因为我别无选择。',......
  • 序列化成Json时,多个对象互相引用导致死循环 Text.Json.JsonException: A possible obj
    错误:当两个类中的属性互相引用时,导致对象实例序列化成Json时死循环,错误如下:System.Text.Json.JsonException:Apossibleobjectcyclewasdetected.Thiscaneither......
  • 力扣-491-递增子序列
    起因是我做笔试,要写出所有子序列并做条件判断,我以为是回溯改一改,但事实上完全不是这样的直达链接主要是1,利用二进制序列枚举快速生成所有的可能子序列,然后利用哈希算法对......
  • 第四章 序列的应用
    实例01输出每日一贴使用datetime.datatime.now()用来获取当前的日期点击查看代码importdatetime#导入日期时间类#定义一个列表mot=["今天星期一:\n坚......
  • 序列的应用例子
    第四章序列的应用实例01:输出每日一贴1importdatetime2#定义一个列表3mot=["今天星期一:\n坚持下去不是因为我很坚强,而是因为我别无选择。",4"今天......
  • 序列的应用
    1.输出每日一帖:    2.分两列显示2017~2018赛季NBA西部联盟前八名的球队    3.向NBA名人堂列表中追加2018年新进入的球队    4.使用二维列表输......
  • Oracle 18c-可伸缩序列(Scalable Sequence)
    说明在18c之前的版本中对于序列的使用,存在着对同一个序列争用的情况,特别是对于RAC这种高并发的环境中争用序列情况更是容易发生。针对这种情况,Oracle退出了可伸缩序列,大大减......
  • [答疑]分析序列图放在哪里好
    ​​软件方法(下)分析和设计第8章连载[20210723更新]>>​​绍校(20***28)23:23:08绍校(20***28)23:23:16潘老师好像分析里面的用例实现绍校(20***28)23:23:19没用过吧绍......
  • [答疑]如何将一个用例链接到它对应的序列图上
    李秀涛(89***24)13:08:50EA中是如何将一个用例链接到它对应的序列图上的?李秀涛(89***324)13:09:09就是怎么达到双击用例,跳转到所对应的序列图月黑风高(124***293)14:19:0......