1 条题解
-
1
#include<iostream> #include<algorithm> using namespace std; int la,lb,a[110],b[110],f[110][110];//状态定义 int d[6][6]= { {0,0,0,0,0,0}, {0,5,-1,-2,-1,-3}, {0,-1,5,-3,-2,-4}, {0,-2,-3,5,-2,-2}, {0,-1,-2,-2,5,-1}, {0,-3,-4,-2,-1,0} }; int main() { //开始输入 cin>>la; for(int i=1;i<=la;i++) { char t; cin>>t; switch(t) { case'A': a[i]=1;break; case'C': a[i]=2;break; case'G': a[i]=3;break; case'T': a[i]=4;break; } } cin>>lb; for(int i=1;i<=lb;i++) { char t; cin>>t; switch(t) { case'A': b[i]=1;break; case'C': b[i]=2;break; case'G': b[i]=3;break; case'T': b[i]=4;break; } } //输入结束 //开始处理边界 f[0][0]=0;//全局变量自动初始化为0,但是作为题解,还是写上好。 for(int i=1;i<=la;i++) f[i][0]=f[i-1][0]+d[a[i]][5]; for(int i=1;i<=lb;i++) f[0][i]=f[0][i-1]+d[5][b[i]]; //边界处理结束 //开始 dp for(int i=1;i<=la;i++) for(int j=1;j<=lb;j++) f[i][j]=max(f[i-1][j-1]+d[a[i]][b[j]],max(f[i-1][j]+d[a[i]][5],f[i][j-1]+d[5][b[j]])); //dp 结束 //开始输出结果 cout<<f[la][lb]<<endl; //输出结果结束 return 0; }
- 1
信息
- ID
- 141
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 3
- 已通过
- 3
- 上传者