眾所周知,自然界的所有生物都有自己的基因序列。但是各個生物之間,或多或少是有一些基因序列是相同的,現在請你來幫幫忙,計算一下兩個生物之間的基因序列相似度。
例如生物a的基因序列為abc ,那麼生物a的基因序列可以拆分成 a , b , c , ab , ac , bc , abc
例如生物b的基因序列為qbc,那麼生物b的基因序列可以拆分成 q , b , c , qb , qc , bc , qbc
那麼這兩種生物共有的最長相似基因序列為bc,bc各佔生物a和b總基因序列的 66.67%
請注意,相似的基因序列必須序列順序也相同,ab與ba不是相似基因序列。
測試樣例由多組測試資料組成。每組測試資料第一行輸入乙個字串s1 ( 1 <= s1.length <= 2000),第二行輸入乙個字串s2 ( 1 <= s.length <= 2000 ) ,分別代表兩個生物的基因序列。基因序列均由小寫字母組成
輸出兩個生物相似的最長基因序列佔自己本身的基因序列的百分比,保留2位小數。
qdwde
qwe60.00% 100.00%
這是乙個dp題(比賽時候還不很熟練就沒有去寫,我太菜了)
現在看看還是挺簡單的 這是一道十分經典求最長公共子串行的題
得出狀態轉移方程
if
(a[i]
==b[j]
)else
然後我們再去除去自身長度*100算出百分比就行了
#include
using namespace std;
int dp[
2005][
2005];
intmain()
else}}
double c=dp[a.
length()
][b.
length()
];printf
("%.2lf%% %.2lf%%\n"
,c/a.
length()
*100
,c/b.
length()
*100);
}return0;
}
3 9 F 基因相似度
眾所周知,自然界的所有生物都有自己的基因序列。但是各個生物之間,或多或少是有一些基因序列是相同的,現在請你來幫幫忙,計算一下兩個生物之間的基因序列相似度。例如生物a的基因序列為abc 那麼生物a的基因序列可以拆分成 a b c ab ac bc abc 例如生物b的基因序列為qbc,那麼生物b的基因...
dp 相似基因
大致思路 dfs也寫了dp也寫了然後發現題讀錯了。所以比賽的時候一定要先把題多讀兩遍每個句子都給它讀懂!這裡兩個字串都可以加入空鹼基!這道題用dp做,難點在 呢?我認為難點在於dp的含義設定 含義中那個 不計算空鹼基 的設定真的是絕了,不然真的,寫不出狀態轉移方程出來的 鬼知道能加多少個空鹼基 這個...
相似度問題 KL散度 軌跡相似度
表示分布之間的 差異 不是 距離 不滿足距離定義的對稱性,不滿足三角不等式。k l a,b kl b,a kl a,b kl b,a kl a,b k l b,a 相對熵公式 dkl p x q x p x lo gp x q x d p x q x sum p x log frac dkl p x...