zoj1027
来源:互联网 发布:linux驱动 编辑:程序博客网 时间:2024/06/14 16:08
解析思路:
状态转移方程b[i][j]=max(b[i-1][j-1]+t[i][j],b[i][j-1]+t[4][j],b[i-1][j]+t[i][4]);i表示第一个字符串位子,j表示第二个字符串的位子;b[i][j]表示1到i,1到j位子的值
#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>int t[5][5]={{5,-1,-2,-1,-3},{-1,5,-3,-2,-4},{-2,-3,5,-2,-2},{-1,-2,-2,5,-1},{-3,-4,-2,-1,0}};int max(int a,int b,int c){ int temp; temp=a>b?a:b; return temp=c>temp?c:temp;}int main(){ int n; scanf("%d",&n); while(n--) { int i,j,k,m,temp1[200],temp2[200]; char s[2][200]; for(j=0;j<2;j++) scanf("%d %s",&m,s[j]); for(k=1;k<=strlen(s[0]);k++) { if(s[0][k-1]=='A') temp1[k]=0; else if(s[0][k-1]=='C') temp1[k]=1; else if(s[0][k-1]=='G') temp1[k]=2; else if(s[0][k-1]=='T') temp1[k]=3; } for(k=1;k<=strlen(s[1]);k++) { if(s[1][k-1]=='A') temp2[k]=0; else if(s[1][k-1]=='C') temp2[k]=1; else if(s[1][k-1]=='G') temp2[k]=2; else if(s[1][k-1]=='T') temp2[k]=3; } int p,q,best[200][200]; best[0][0]=0; for(j=1;j<=strlen(s[0]);j++) best[j][0]=best[j-1][0]+t[temp1[j]][4]; for(j=1;j<=strlen(s[1]);j++) best[0][j]=best[0][j-1]+t[4][temp2[j]]; for(p=1;p<=strlen(s[0]);p++) { for(q=1;q<=strlen(s[1]);q++) { best[p][q]=max(t[temp1[p]][temp2[q]]+best[p-1][q-1], best[p-1][q]+t[temp1[p]][4],best[p][q-1]+t[4][temp2[q]]); } } printf("%d\n",best[p-1][q-1]); } return 0;}
- zoj1027
- ZOJ1027
- [水]ZOJ1027
- zoj1027 Human Gene Functions
- ZOJ1027 Human Gene Functions
- ZOJ1027 POJ1080Human Gene Functions
- ZOJ1027 Human Gene Functions
- ZOJ1027-Human Gene Functions(dp)
- zoj1027 Human Gene Functions 动态规划
- 利用反射读取类的私有变量
- 21、2010年中兴面试题
- BlackBerry PlayBook NDK 2.0开发使用真机测试Qt应用
- 基础算法(一)
- 开发者应该具备的15个编程好习惯
- zoj1027
- 第四周实验报告4
- oracle数据库SQL查询语句练习
- 开始的NS-3之旅
- 二维数组指针
- Oracle(八)--------------------集合运算
- 《第四周实验报告任务3》
- WebSocket和node.js
- 第四周实验报告3