4837005_tle.cpp

来自「部分PKU上的源码」· C++ 代码 · 共 79 行

CPP
79
字号
#include<iostream>
using namespace std;
char x[205];
char y[105];
int xl,yl;
int s[110][210];
int huo[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 result;
int getnum(char x)
{
	switch(x)
	{
	case 'A':return 0;
	case 'C':return 1;
	case 'G':return 2;
	case 'T':return 3;
	case 'K':return 4;
	}
	return -1;
}
int getit(char x,char y)
{
	int xh=getnum(x);
	int yh=getnum(y);
	return huo[xh][yh];
}
void testout()
{
	int i,j;
	for(i=0;i<yl;i++)
	{for(j=0;j<xl;j++) cout<<s[i][j]<<" ";cout<<endl;}
}
int main()
{
	int testnumber,i,j,k,l;
	cin>>testnumber;
	for(int count=0;count<testnumber;count++)
	{
		memset(s,0,sizeof(s));
		result=-100000;
		cin>>xl;
		x[0]='K';
		xl*=2;xl++;
		for(i=1;i<xl;i++) 
		{
			cin>>x[i++];
			x[i]='K';
		}
		cin>>yl;
		for(i=0;i<yl;i++)cin>>y[i];
		//i==0
		int temp=0;
		for(i=0;i<xl;i++)
		{
			s[0][i]=temp+getit(y[0],x[i]);
			temp+=getit('K',x[i]);
		}
		for(i=1;i<yl;i++)
		{
			for(j=0;j<xl;j++)
			{
				int lmax=-100000;
				for(k=0;k<j;k++) 
				{
					temp=s[i-1][k];
					for(l=k+1;l<j;l++) temp+=getit(x[l],'K');
					if(temp>lmax) lmax=temp;
				}
				if(x[j]=='K') if(s[i-1][j]>lmax) lmax=s[i-1][j];
				s[i][j]=lmax+getit(x[j],y[i]);
			}
		}
		//testout();
		result=-100000;
		for(i=0;i<xl;i++)if(result<s[yl-1][i]) result=s[yl-1][i];
		cout<<result<<endl;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?