題解搬運 藍橋杯2023年第4題題解

2022-08-28 12:57:13 字數 1390 閱讀 4524

從我原來的部落格上搬運。原先blog作廢。

脫氧核糖核酸即常說的dna,是一類帶有遺傳資訊的生物大分子。它由4種主要的脫氧核苷酸(damp、dgmp、dcmt和dtmp)通過磷酸二酯鍵連線而成。這4種核苷酸可以分別記為:a、g、c、t。

dna攜帶的遺傳資訊可以用形如:aggtcgactcca…. 的串來表示。dna在轉錄複製的過程中可能會發生隨機的偏差,這才最終造就了生物的多樣性。

為了簡化問題,我們假設,dna在複製的時候可能出現的偏差是(理論上,對每個鹼基被複製時,都可能出現偏差):

漏掉某個脫氧核苷酸。例如把 aggt 複製成為:agt

錯碼,例如把 aggt 複製成了:agct

重碼,例如把 aggt 複製成了:aaggt

如果某dna串a,最少要經過 n 次出錯,才能變為dna串b,則稱這兩個dna串的距離為 n。

例如:aggtcatattcc 與 cggtcatattc 的距離為 2

你的任務是:編寫程式,找到兩個dna串的距離。

此題原型即最短編輯距離,用dp解決。

不妨設兩串分別為$str_a,str_b$,長度分別為$m,n$,設$dp[i][j]$為$a$串的長度為$i$的字首字串和$b$串的長度為$j$的字首子串,那麼原題即求$dp[m-1][n-1]$。

下面是轉移方程:

$$dp[i][j]=\left\

dp[i-1][j-1] & , & a[i]=b[j] \\

min\& , & a[i] \ne b[j]

\end

\right.

$$理解問題應當出現在第二個式子上。我們以b串為母串,那麼

一、二、三子式分別對應重複、刪除、修改這三種情況。

特別地,邊界條件:$dp[i][0]=i,dp[0][j]=j$。

為何呢?因為從i長度變為空串總要i次操作。

#include 

using

namespace

std;

#define f1(x,y) for(int x=1;x<=y;++x)

#define f0(x,y) for(int x=0;x!=y;++x)

#define bf1(x,y,z) for(int x=y;x>=z;--x)

#define bf0(x,y,z) for(int x=y;x!=z;--x)

typedef

long

long ll;

typedef

unsigned

long

long ull;

int dp[10005][10005];

int main()

else

}else}}

cout

<1][blen-1]0;}

微生物增殖,藍橋杯2023年第1題

微生物增殖 假設有兩種微生物x和y,x出生後每隔 3分鐘 一次 數目加倍 y出生後每隔 2分鐘 一次 數目加倍 乙個新出生的 x,半分鐘之後吃掉1個 y,且從此開始每隔 1分鐘吃掉1個 y。已知新出生的 x 10 y 89 求60 分鐘後y 的數目。若 x 10 y 90呢?本題的要求就是寫出這兩種...

藍橋杯第4屆第10題

小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l 1的 連續 數列,則稱這個區間連號區間。當n很小的時候,小明可以很快地算出答案,但是當n...

2016藍橋杯javaA組第4題

分小組9名運動員參加比賽,需要分3組進行預賽。有哪些分組的方案呢?我們標記運動員為 a,b,c,i 下面的程式列出了所有的分組方法。該程式的正常輸出為 abc def ghi abc deg fhi abc deh fgi abc dei fgh abc dfg ehi abc dfh egi ab...