1 条题解
-
0
C++ :
#include <iostream> #include <algorithm> using namespace std; const int N(103); int f[N][N]={0},ACGT[6][6]={0},g[2][N]={0}; int main() { for(int i=1;i<=5;i++) switch (i) { case 1: for(int j=1;j<=5;j++){int temp[6]={0,5,-1,-2,-1,-3};ACGT[i][j]=temp[j];}break; case 2: for(int j=1;j<=5;j++){int temp[6]={0,-1,5,-3,-2,-4};ACGT[i][j]=temp[j];}break; case 3: for(int j=1;j<=5;j++){int temp[6]={0,-2,-3,5,-2,-2};ACGT[i][j]=temp[j];}break; case 4: for(int j=1;j<=5;j++){int temp[6]={0,-1,-2,-2,5,-1};ACGT[i][j]=temp[j];}break; case 5: for(int j=1;j<=5;j++){int temp[6]={0,-3,-4,-2,-1,0};ACGT[i][j]=temp[j];}break; } int x(0);char y; int l1,l2; for(int i=0;i<2;i++) { cin>>x; if(i==0) l1=x; else l2=x; for(int j=1;j<=x;j++) { cin>>y; switch(y) { case 'A': g[i][j]=1;break; case 'C': g[i][j]=2;break; case 'G': g[i][j]=3;break; case 'T': g[i][j]=4;break; } } } for(int i=1;i<=l1;i++) f[i][0]=f[i-1][0]+ACGT[g[0][i]][5]; for(int i=1;i<=l2;i++) f[0][i]=f[0][i-1]+ACGT[5][g[1][i]]; for(int i=1;i<=l1;i++) for(int j=1;j<=l2;j++) { int x(g[0][i]),y(g[1][j]); f[i][j]=-100000; f[i][j]=max(f[i][j],f[i-1][j-1]+ACGT[x][y]); f[i][j]=max(f[i][j],f[i-1][j-1]+ACGT[x][5]+ACGT[y][5]); f[i][j]=max(f[i][j],f[i-1][j]+ACGT[x][5]); f[i][j]=max(f[i][j],f[i][j-1]+ACGT[y][5]); } cout<<f[l1][l2]<<endl; return 0; }
- 1
信息
- ID
- 768
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者