求基因型總數

2021-07-26 04:56:34 字數 1355 閱讀 4924

【題目描述】

生物的各種性狀是由基因控制的。乙個性狀,可能表現為顯性,也可能表現為隱性,顯性基因用乙個大寫字母表示,相應的隱性基因由此字母的小寫形式來表示。每個性狀由兩個基因控制。當且僅當這兩個基因都為隱性時,性狀表現為隱性,否則表現為顯性。形成生殖細胞時,這兩個基因彼此分開,其中的乙個與另一方的乙個搭配。

例如,基因為dd和dd的兩個生物交配,產生的後代,基因可能為dd,或dd。每個生物當然不只一種性狀,當性狀數大於一時,遺傳也遵循上述規律。例如說,aabb和aabb交配,後代的基因可能為:aabb,或aabb,或aabb,或aabb。

所有基因皆為顯性的生物叫顯性純合子,所有基因皆為隱性的生物叫隱性純合子。我們把顯性純合子與隱性純合子交配,產生許多後代,統稱為f1代。再用f1代的生物進行交配(近親結婚啊!),產生的後代叫f2代。……,依此類推。我們把一種基因的組成叫做一種基因型,例如aabb是一種基因型,bbaa和它的組成是一樣的,所以是同一種基因型。另外,aa和aa也是一樣的。aabb和aabb則是不同的基因型。(後者多了乙個b,少了乙個b)。另外,性狀數量超過二十六時,英文本母就不夠用了。不過不用管它,我們假設有足夠的英文本母來表示控制不同性狀的基因。

現在,輸入性狀總數n,(1<=n<=1000),和交配的代數m(1<=m<=100),求fm代生物基因型可能的總數。

【輸入格式】

兩個整數n和m

【輸出格式】

fm代生物可能的基因型的總數

【樣例輸入】

2 2

【樣例輸出】

9 【分析】

先考慮m=1的情況。一開始是aa和aa交配,aa只能提供a,aa只能提供a,所以後代只有aa。

然後aa之間雜交,雙方都可以提供a、a,組合可以得到下一代有aa,aa,aa,有3種,以後每一代都有aa這樣的基因型,所以每代都有這三種,而對於a(a)這種形狀來說,總共也只有這3種形狀。所以m>1的時候,答案就是3^n。

當然,3^1000用long long也是存不下的,必須用高精了。高精度並不難吧。

#include

#include

using

namespace

std;

int main()

int a[100000];

a[0]=1;

int k=1,temp,carry=0,i,j;

for (i=0;i0;

for(j=0;j3+carry;

a[j]=temp%10;

carry=temp/10;

}if (carry!=0) a[k++]=carry;

}for (i=k-1;i>=0;i--) printf("%d",a[i]);

}

完全揹包求方案總數

給定乙個正整數n,求將其分解成若干個素數之和的方案總數。這題和p1164 小a點菜很像,但是那題是01揹包,這題是完全揹包。include include include include include define int long long using namespace std const i...

kasp技術原理 KASP基因分型

kasp基因分型介紹 kasp kompetitive allele specific pcr 即競爭性等位基因特異性pcr,原理上與taqman檢測法類似,都是基於終端螢光訊號的讀取判斷,每孔反應都是採用雙色螢光檢測乙個snp位點的兩種基因型,不同的snp對應著不同的螢光訊號。kasp技術與taq...

用陣列求銷售額總數(新手)

建立的包名。package qige 建立乙個類。public class zy4 arr 1 new int arr 2 new int arr 3 new int 定義和為零 int sum 0 定義for迴圈。for int i 0 i 定義組從零開始計算數值。int group 0 內部巢狀...