P1140 相似基因 詳解

2022-07-26 14:42:12 字數 894 閱讀 3206

此題與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。生物學家正致力於尋找人類基因的功能,以利用於診斷疾病和發明藥物。在乙個人類基因工作組的任務中,生物學家研究的是 兩個基因的相似程度。因為這個研究對疾病的 有著非同尋常的作用。兩個基因的相似度的計算方法如下 對於兩個已知...