洛谷P1140 相似基因【线性dp】
题目 : https://www.luogu.org/problemnew/show/P1140 题意: 给定两串基因串(只包含ATCG),在其中插入任意个‘-’使得他们匹配。(所以一共是5种字符) 这5种字符两两之间有一个匹配数值,要求使这两个字符串的匹配值之和最大。 思路: dp[i][j]表示匹配了s1中前i个字符和s2中前j个字符的最大匹配值。 完成s1[i]与s2[j]的匹配只有三种可能。 1.s1[i]之前已经匹配好,s2[j]配‘-’。即dp[i][j] = dp[i][j-1]+sco[s2[j]]['-'] 2.s2[j]之前已经匹配好,s1[i]配‘-’。即d[i][j] = dp[i-1][j]+sco[s1[i]]['-'] 3.s1[i]配s2[j]。即dp[i][j] = dp[i - 1][j - 1] + sco[s1[i]][s2[j]] 1 #include<cstdio> 2 #include<cstdlib> 3 #include<map> 4 #include<set> 5 #include<cstring> 6 #include<algorithm> 7 #include<vector> 8 #include<cmath> 9 #include<stack> 10 #include<queue> 11 #include<iostream>