1 条题解

  • 1
    @ 2022-7-17 21:47:23
    #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
    上传者