题意 : 题目链接

分析 : 

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

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

即找出 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. sql盲注-笔记

     盲注是因为数据库查询的结果不会直接显示在页面.只能通过构造查询语句查看反馈的结果真&假状态来判断信息.   实际注入手法和回显注入区别不大 下面只记录相关思路   select length ...

  2. CSS3新特性(阴影、动画、渐变)

    一.阴影 1.1文字阴影: text-shadow<length>①: 第1个长度值用来设置对象的阴影水平偏移值.可以为负值 <length>②: 第2个长度值用来设置对象的阴 ...

  3. 生成url的二维码图片

    <?php require_once "./phpqrcode.php"; //生成二维码 $img = \QRcode::png("https://www.bai ...

  4. python__基础数据类型

    字符串和常用数据结构 使用字符串 第二次世界大战促使了现代电子计算机的诞生,当初的想法很简单,就是用计算机来计算导弹的弹道,因此在计算机刚刚诞生的那个年代,计算机处理的信息主要是数值,而世界上的第一台 ...

  5. lamp项目上线流程简述 (ubuntu16.04 )

    1  新建一个sudo用户,而不是直接用root操作 ①  新建用户可参考 https://www.cnblogs.com/bushuwei/p/10880182.html ②  赋予sudo权限: ...

  6. 吴恩达机器学习101:SVM优化目标

    1.为了描述SVM,需要从logistic回归开始进行学习,通过改变一些小的动作来进行支持向量机操作.在logistic回归中我们熟悉了这个假设函数以及右边的sigmoid函数,下式中z表示θ的转置乘 ...

  7. 关于echarts 重绘/图表切换/数据清空

    容器id 为main var myChart=document.getElementById("main") myChart.removeAttribute("_echa ...

  8. celery开发中踩的坑

    celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...

  9. SQLite3中自增主键相关知识总结,清零的方法、INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用

    这篇文章主要介绍了SQLite3中自增主键相关知识总结,清零的方法.INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用等,需要的朋友可以参考下 一.SQLite清空表 ...

  10. centos--软件源--本地软件源---离线安装

    一.软件源配置文件 1./etc/yum.conf 配置文件 [main] cachedir=/var/cache/yum #yum下载的RPM包的缓存目录 keepcache= #缓存是否保存,1保 ...