[동적 기획 DP,2 차원 동 귀]poj 1080,Human Gene Functions

http://poj.org/problem?id=1080
주의,세 가지 상황:
1)ai 와 bi 가 일치(a[i]와 b[j]가 같 든 안 맞 든 상 관 없 이 일치 하지 않 아 도 되 기 때문에 대 가 를 부담 할 뿐 입 니 다!!코드 주석 이 떨 어 진 부분 을 보면 무슨 뜻 인지 알 수 있다).
2)ai 는 빈 칸 과 일치 하고 ai-1 과 bj 와 일치 합 니 다.
3)bj 와 빈 칸 이 일치 하고 ai 와 bj-1 이 일치 합 니 다.
# include<iostream>
using namespace std;

# define N 103
char a[N],b[N];
int r[N][N];

int match[N][N];

void Init()
{
    match['A']['A']=match['C']['C']=match['G']['G']=match['T']['T']=5;
    match['A']['C']=match['C']['A']=match['A']['T']=match['T']['A']=match[' ']['T']=match['T'][' ']=-1;
    match['A']['G']=match['G']['A']=match['C']['T']=match['T']['C']=match['G']['T']=match['T']['G']=match['G'][' ']=match[' ']['G']=-2;
    match['A'][' ']=match[' ']['A']=match['C']['G']=match['G']['C']=-3;
    match['C'][' ']=match[' ']['C']=-4;
}

int main()
{
	int t,i,j,k,l1,l2,t1,t2;
	Init();

	cin>>t;
	for(i=1;i<=t;i++)
	{
		r[0][0]=0;
		cin>>l1;
		for(j=1;j<=l1;j++)
		{
			cin>>a[j];
			r[j][0]=r[j-1][0]+match[a[j]][' '];
		}
		cin>>l2;
		for(k=1;k<=l2;k++)
		{
			cin>>b[k];
			r[0][k]=r[0][k-1]+match[' '][b[k]];
		}

		for(j=1;j<=l1;j++)
		{
			for(k=1;k<=l2;k++)
			{
				/*
				if(a[j]==b[k])
				{
					r[j][k]=r[j-1][k-1]+match[a[j]][b[k]];
				}
				else
				{
					t1=r[j-1][k]+match[a[j]][' '];
					t2=r[j][k-1]+match[' '][b[k]];
					r[j][k] = t1>t2? t1:t2;
				}
				*/
				r[j][k]=r[j-1][k-1]+match[a[j]][b[k]];
				r[j][k]= r[j][k]>r[j-1][k]+match[a[j]][' ']? r[j][k]:r[j-1][k]+match[a[j]][' '];
				r[j][k]= r[j][k]>r[j][k-1]+match[' '][b[k]]? r[j][k]:r[j][k-1]+match[' '][b[k]];
			}
		}
		cout<<r[l1][l2]<<endl;
	}
	return 0;
}

좋은 웹페이지 즐겨찾기