题意 : 题目链接

分析 : 

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

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

即找出 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. C语言Ⅰ作业12—学期总结

    一.我学到的内容 二.我的收获 作业链接 收获 C语言Ⅰ博客作业01 认识了PTA编程,博客园,Markdown基本语法1,Markdown基本语法2 C语言Ⅰ博客作业02 PTA系统常见问题解答 C ...

  2. [Python3] 029 常用模块 timeit

    目录 timeit 直接举例 1. 测量生成列表的时间 2. 测量函数运行时间(一) 3. 测量函数运行时间(二) timeit 直接举例 必要的导入 import timeit 1. 测量生成列表的 ...

  3. Element el-table-column组件列宽度设置百分比无效

    问题 使用Element table组件时,给列设置百分比宽度无效(width="30%") 解决 用属性min-width="3"代替属性width=&quo ...

  4. 洛谷 P3258 松鼠的新家 题解

    题面 貌似这道题暴力加玄学优化就可以AC? 下面是正解: 1.树链剖分: 我们在u到v之间都放一个糖果,可以将松鼠它家u到v的糖果数都加1.每一次将a[i]到a[i+1] (a数组是访问顺序)的节点加 ...

  5. Codeforce1196_D_F

    D RGB Substring 题意 给定一个只含RGB三种字符的字符串,问最少修改多少个字符,能使得修改后的字符串存在一个长度为\(k\)的子串是...RGBRGB...这个循环字符串的子串. 分析 ...

  6. 使用procedump捕获未处理异常的dump

    -ma full memory dump, always do this on 2003 as 4gb is not much and it is good to have the heap -mp  ...

  7. c# 动态加载和卸载DLL程序集

    原文:c# 动态加载和卸载DLL程序集 在 C++中加载和卸载DLL是一件很容易的事,LoadLibrary和FreeLibrary让你能够轻易的在程序中加载DLL,然后在任何地方卸载.在 C#中我们 ...

  8. redis为什么使用单线程 ,还那么快,单线程是怎么实现的

    单线程使用队列 为什么使用单线程 https://baijiahao.baidu.com/s?id=1628498089535886382&wfr=spider&for=pc http ...

  9. nginx服务报403错误的解决方法

    1.可能是文件权限问题,看一下网站所在的文件夹权限,用户组和用户名是否属于www:www,因为nginx.conf顶头写的是user www:www

  10. 60. Permutation Sequence (JAVA)

    The set [1,2,3,...,n] contains a total of n! unique permutations. By listing and labeling all of the ...