poj 1080-Human Gene Functions

一开始毫无头绪啊。

后来看了LCS之后闭着眼自己写了一遍。


http://blog.csdn.net/v_july_v/article/details/6695482


#include<iostream>
#include<string>

using namespace std;

unsigned char index(char letter)
{
	unsigned char ind = 4;
	switch(letter)
	{
		case 'A':ind = 0;break;
		case 'C':ind = 1;break;
		case 'G':ind = 2;break;
		case 'T':ind = 3;break;
		case '-':ind = 4;break;
		default:;

	}
	return ind;
}

int max(int a,int b,int c)
{
	int out = a>b?a:b;
	out = out>c?out:c;
	return out;
}
int main()
{

	char match[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 i=0,j=0,ii=0,jj=0,temp1,temp2,temp3;
	char s1[100],s2[100];
	int l1=0,l2=0;
	int samples = 0;
	int **lp=NULL;
	cin>>samples;
	for(i=0;i<samples;i++)
	{
		cin>>l1;
		cin>>s1;
		cin>>l2;
		cin>>s2;
		lp = new int*[l1+1];
		lp[0] = new int[l2+1];

		lp[0][0] = 0;
		for (ii = 1;ii<=l1;ii++)
		{
			lp[ii] = new int[l2+1];
			lp[ii][0] = lp[ii-1][0]+match[index(s1[ii-1])][index('-')];
		}
		for (jj = 1;jj<=l2;jj++)
		{
			lp[0][jj] = lp[0][jj-1]+match[index(s2[jj-1])][index('-')];
		}
		for (ii = 1;ii<=l1;ii++)
		{
			for (jj = 1;jj<=l2;jj++)
			{
				temp1 = lp[ii-1][jj]+match[index(s1[ii-1])][index('-')];
				temp2 = lp[ii][jj-1]+match[index(s2[jj-1])][index('-')];
				temp3 = lp[ii-1][jj-1]+match[index(s2[jj-1])][index(s1[ii-1])];
				lp[ii][jj] = max(temp1,temp2,temp3);
			}
		}
		cout<<lp[l1][l2]<<endl;

	}
    return 0;
    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值