BZOJ 2764 JLOI2011 基因補全

2021-06-28 20:06:25 字數 951 閱讀 2194

題目:

題意:給定乙個長度為n的鹼基序列s和乙個長度為m的鹼基序列t,現在希望向序列t裡補一定的鹼基使得序列s和序列t配對,配對的規則是at配對,cg配對,新增鹼基的位置與數量不同的方案視為不同,求不同的方案數。

0n≤2000

。題解:

可以考慮算出序列t在序列s裡匹配的本質不同方案數,利用dp可以很容易解決這個問題。 令f

[i][

j]表示序列s前i位匹配序列t至第j位的方案數,則對於f[

i][j

] ,若不用s[

i]匹配t[

j],則為f[

i−1]

[j] ,若能匹配,則可由f[

i−1]

[j−1

] 轉化至該狀態,最終的答案為f[

n][m

] ,dp可滾動。

粗略估計答案的上界,可以發現存在情況使得答案超過264

,但不可能超過c(

2000

,1000

) 或者更小,dp直接配上高精度即可。

**:

#include 

const

int maxn = 2001, maxl = 70, mod = 1000000000;

struct bigint

void print()

void

operator += (const bigint &x)

}if(num[len]) ++len;

}} f[maxn];

inline

bool check(char a, char b)

int n, m;

char s[maxn], t[maxn];

int main()

2764 JLOI2011 基因補全

題目鏈結 題目大意 給定乙個長度為n的鹼基序列s和乙個長度為m的鹼基序列t,現在希望向序列t裡補一定的鹼基使得序列s和序列t配對,求方案數 題解 f i j 表示長串 匹配到i 短串匹 配到j的 方案數 f i j f i 1 j 短串 乙個字 母 f i j f i 1 j 1 長 短串可以 匹配...

BZOJ3192 JLOI2013 刪除物品

原題位址 自己想的奇葩做法 對於乙個優先順序為x的物品,考察該物品下方優先順序大於x物品的優先順序被分成了多少個連續段 舉個例子,如x 4,該物品下方物品的優先順序有5,6,7,9,10,13,14,19,則段數為4 則該物品需要被移動的次數k 段數 2 優先順序為x 1的物品在該物品下方?1 0 ...

bzoj4006 JLOI2015 管道連線

傳送門 思路 一眼看上去很像斯坦納樹 但是限制稍有不同,只要每種顏色的點聯通即可 也就是說最後可能是森林 我聽說裸寫斯坦納樹有90 所以我們要在外面再套一層dp f i j 還是斯坦納樹的狀態,i是以i為根,j是狀態為j 先用斯坦納樹求出每種聯通狀況的最小費用 再設dp i 表示i這個狀態的最小費用...