此題與lcs非常相似。
因為是兩個串的比對,所以我們很容易想到用f【i】【j】來表示a串的前i個鹼基和b串的前j個鹼基配出的最大相似度(每乙個鹼基都配對乙個鹼基,或者配空鹼基),
那麼這個狀態的前驅就有三種:
①f【i】【j-1】+(b【j】與空鹼基的相似度)
②f【i-1】【j】+(a【i】與空鹼基的相似度)
③f【i-1】【j-1】+a【i】與b【j】的相似度
那麼怎麼表示相似度呢,用函式嗎,當然是陣列更方便
int mat[5][5]=,,,,};(可以把讀入的字元換成整數存起來)
完整**如下:
#include#include#includeusing namespace std;
const int n=105;
int n,m;
char s1[n],s2[n],t;
int mat[5][5]=,,,,};
int a[n],b[n],f[n][n];//0-0,1 2 3 4 1-0,1,2,3,4
void init();
int main()
{ //freopen("in.txt","r",stdin);
init();
memset(f,0x8f,sizeof(f));
f[0][0]=0;
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
{int x1=mat[0][b[j]];
int x2=mat[a[i]][0];
int x3=mat[a[i]][b[j]];
/*if(i==2&&j==1){
cout<>n>>s1>>m>>s2;
for(int i=0;i
P1140 相似基因
大家都知道,基因可以看作乙個鹼基對序列。它包含了4種核苷酸,簡記作a,c,g,t。生物學家正致力於尋找人類基因的功能,以利用於診斷疾病和發明藥物。在乙個人類基因工作組的任務中,生物學家研究的是 兩個基因的相似程度。因為這個研究對疾病的 有著非同尋常的作用。兩個基因的相似度的計算方法如下 對於兩個已知...
P1140 相似基因
題意 給出兩個序列,讓我們進行配對,配對的時候,我們可以在其中加空數 兩個序列都可以 題意給出每種配對的權值,讓我們求如何配對權值最大 思路 我們先預處理出配對的權值情況,再預處理出當兩個序列各自沒開始匹配,而另外乙個序列匹配的多少個空數的情況 為何?因為我們從1開始,需要以0這個情況為基準 然後,...
洛谷P1140 相似基因
大家都知道,基因可以看作乙個鹼基對序列。它包含了4種核苷酸,簡記作a,c,g,t。生物學家正致力於尋找人類基因的功能,以利用於診斷疾病和發明藥物。在乙個人類基因工作組的任務中,生物學家研究的是 兩個基因的相似程度。因為這個研究對疾病的 有著非同尋常的作用。兩個基因的相似度的計算方法如下 對於兩個已知...