题意 : 题目链接

分析 : 

可以观察到给出的配对代价表中对角线部分是正数

其余的都是负数,也就是说让相同字母的匹配的越多越好

即找出 LCS 但是这里 DP 的过程需要记录一下代价

有关 LCS 的一篇博客 ==> Click here

如果不是计算长度而是计算配对的价值,那么初始化的时候

记得将每一个串的字母作为结尾与空串配对的价值初始化一下

即 dp[i][0] 与 dp[0][i]

#include<bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
;
][] = {
    {, -, -, -, -},
    {-, , -, -, -},
    {-, -, , -, -},
    {-, -, -, , -},
    {-, -, -, -, -INF}
};

char str1[maxn], str2[maxn];
map<char, int> mp;
int dp[maxn][maxn];

int main(void)
{
    mp[,
    mp[,
    mp[,
    mp[,
    mp[;

    memset(dp, -INF, sizeof(dp));

    int N, M;
    scanf("%d", &N);
    ; i<=N; i++) scanf(" %c", &str1[i]);
    scanf("%d", &M);
    ; i<=M; i++) scanf(" %c", &str2[i]);

    dp[][] = ;
    ; i<=N; i++) dp[i][] = dp[i-][] + cost[mp[str1[i]]][];
    ; i<=M; i++) dp[][i] = dp[][i-] + cost[][mp[str2[i]]];
    /*
    对于上面这两个 for 循环的初始化,实际上就是对每一个串到 i 为结尾与一个空串
    做匹配的结果,即到 i 为止,整个串与空碱基做匹配的代价,这个初始化是有必要的
    举个例子
    1 A
    3 TGC
    没有这个初始化的话 错误答案就是 -7 对应如下情况
    ---
    TGC
    实际最优的情况是 -4 对应如下情况
    --A
    TGC
    因为没有这个初始化,dp[1][j] 的情况不能从 dp[i-1][j-1] 转移而来
    即让第一个串的第 1 字符与当前第二个串的第 j 个字符做匹配的代价
    对于LCS这种DP的变体,记得这个初始化!
    */
    ; i<=N; i++){
        ; j<=M; j++){
            dp[i][j] = max(dp[i][j], dp[i-][j-] + cost[mp[str1[i]]][mp[str2[j]]]);
            dp[i][j] = max(dp[i][j], dp[i-][j] + cost[mp[str1[i]]][]);
            dp[i][j] = max(dp[i][j], dp[i][j-] + cost[][mp[str2[j]]]);
        }
    }

//    for(int i=1; i<=N; i++){
//        for(int j=1; j<=M; j++){
//            printf("%d ", dp[i][j]);
//        }puts("");
//    }

    return !printf("%d\n", dp[N][M]);;
}

洛谷 P1140 相似基因 ( 线性DP || 类LCS )的更多相关文章

  1. 洛谷P1140 相似基因 (DP)

    洛谷P1140 相似基因 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. ...

  2. 洛谷P1140 相似基因(线性DP)

    题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了444种核苷酸,简记作A,C,G,TA,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类 ...

  3. 2018.08.16 洛谷P2029 跳舞(线性dp)

    传送门 简单的线性dp" role="presentation" style="position: relative;">dpdp. 直接推一推 ...

  4. 洛谷P1140 相似基因【线性dp】

    题目:https://www.luogu.org/problemnew/show/P1140 题意: 给定两串基因串(只包含ATCG),在其中插入任意个‘-’使得他们匹配.(所以一共是5种字符) 这5 ...

  5. 洛谷 P1140 相似基因(DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 参考资料: [1]:https://www.cnblogs.com/real-l/p/9 ...

  6. 2018.11.04 洛谷P2679 子串(线性dp)

    传送门 为什么前几年的noipnoipnoip总是出这种送分题啊? 这个直接线性dpdpdp不就完了吗? f[i][j][k][0/1]f[i][j][k][0/1]f[i][j][k][0/1]表示 ...

  7. 洛谷P1140 相似基因

    题目:https://www.luogu.org/problemnew/show/P1140 分析: 本题一看就知道是一道动归,其实和字串距离非常的像,只不过多了题目规定的匹配相似度罢了. 匹配的相似 ...

  8. 洛谷 P1140 相似基因 题解

    每日一题 day23 打卡 Analysis dp[i][j]表示序列A中前i个与序列B中前j个匹配的相似度最大值 所以,dp方程很容易想到: 1.让a[i]与b[j]匹配 2.让a[i]与B序列中一 ...

  9. 洛谷P1052 过河【线性dp】【离散化】

    题目:https://www.luogu.org/problemnew/show/P1052 题意: 青蛙要从0跳到超过$l$的地方,每一次可以跳$s$到$t$之间的任意数. 在河中有m个石头,要求在 ...

随机推荐

  1. 【VS开发】【智能语音处理】解读男女声音的区别:亮度,糙度

    1. 男女声音的本质不同:音高不同 这是废话,地球人都知道.都说女声比男声高八度,其实不能,高4-6度差不多. 2. 男女声音的不同:亮度 从直观上这个很好理解,女声普遍更"亮", ...

  2. python logger理解

    import logging#进行基本的日志配置 logging.basicConfig(filename = 'access.log',format = '%(asctime)s - %(name) ...

  3. Dubbo基础、高级讲解

    基础 https://blog.csdn.net/hardworking0323/article/category/6148466 高级 https://blog.csdn.net/hardworki ...

  4. Spring数据库主从分离

    1.spring+spring mvc +mybatis+druid 实现数据库主从分离 2.Spring+MyBatis主从读写分离 3.MyCat痛点 4.Spring+MyBatis实现数据库读 ...

  5. 【转帖】UDIMM、RDIMM、SODIMM以及LRDIMM的区别

    转载自http://www.sohu.com/a/165343889_781333. DIMM简介 DIMM(Dual Inline Memory Module,双列直插内存模块)与SIMM(sing ...

  6. 基于Spark的电影推荐系统

    数据文件: u.data(userid  itemid  rating  timestamp) u.item(主要使用 movieid movietitle) 数据操作 把u.data导入RDD, t ...

  7. [.net core]9.中间件的具体实现

    查看Startup.cs的configure方法 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { i ...

  8. css3弹性伸缩布局(一)—————flex布局

    CSS3弹性伸缩布局简介 2009年,W3C提出了一种崭新的方案—-Flex布局(即弹性伸缩布局),它可以简便.完整.响应式地实现各种页面布局,包括一直让人很头疼的垂直水平居中也变得很简单地就迎刃而解 ...

  9. ubuntu 安装mysql5.7

    一.Windows mysql5.6 解压版 安装 关于widnows平台上的安装教程,可参考百度经验: 链接:https://jingyan.baidu.com/article/f3ad7d0ffc ...

  10. element-ui 中 switch 开关绑定number 的解决方法

    虽然element-ui 的文档中说明 v-model的值可以是 boolean / string / number 三种类型 , (文档在此)https://element.eleme.cn/#/z ...