题目转自hdu 1080,题目传送门


题目大意:

不想翻译!


解题思路:

其实就是一道变异的求lcs(Longest common subsequence 最长公共子序列)的题

不过,它的依据是下面这张图:

所以,需要一个数组来存规则:

int ta[][]={
{,-,-,-,-},
{-,,-,-,-},
{-,-,,-,-},
{-,-,-,,-},
{-,-,-,-,}
};

同时,需要把每个字母对应成一个数字

处理字母对应代码如下:

int get_init(char s)
{
if(s=='A') return ;
else if(s=='C') return ;
else if(s=='G') return ;
else if(s=='T') return ;
else return ;
}

但有是由于它的计分标准要按照那个表计算

所以我们要通过函数来计算所对应的分值:

int get_value(char s1,char s2)
{
int x=get_init(s1);
int y=get_init(s2);
return ta[x][y];
}

但是,令人头秃的是如何初始化......

于是,思考了0.5h后,我放弃了

后来,我去问了lhc学长(学长博客点此,被迫推荐)

然后这位大佬看了题,没过10min就读懂了

1min后,初始化代码就被他写出来了,如下:

for(int i=;i<=l1;i++) dp[i][]=dp[i-][]+get_value(s1[i],'-');
for(int i=;i<=l2;i++) dp[][i]=dp[][i-]+get_value('-',s2[i]);

p.s.这代码我可看了0.25h才看懂,大佬真的很nb

然后随便写一个n2的dp就可以愉快地AC了......(愉快吗?)


AC代码如下:

#include<iostream>
#include<stdio.h>
#include<string.h>
#define maxn 105
using namespace std;
char s;
char s1[maxn],s2[maxn];
int T,l1,l2;
int dp[maxn][maxn];
int ta[][]={
{,-,-,-,-},
{-,,-,-,-},
{-,-,,-,-},
{-,-,-,,-},
{-,-,-,-,}
};
int get_init(char s)
{
if(s=='A') return ;
else if(s=='C') return ;
else if(s=='G') return ;
else if(s=='T') return ;
else return ;
}
int get_value(char s1,char s2)
{
int x=get_init(s1);
int y=get_init(s2);
return ta[x][y];
}
void dp_lcs(int l1,int l2)
{
for(int i=;i<=l1;i++)
for(int j=;j<=l2;j++)
dp[i][j]=max(dp[i-][j-]+get_value(s1[i],s2[j]),max(dp[i-][j]+get_value(s1[i],'-'),dp[i][j-]+get_value('-',s2[j])));
}
int main()
{
scanf("%d",&T);
while(T--)
{
memset(dp,,sizeof(dp));
scanf("%d%s",&l1,s1+);
scanf("%d%s",&l2,s2+);
dp[][]=;
for(int i=;i<=l1;i++) dp[i][]=dp[i-][]+get_value(s1[i],'-');
for(int i=;i<=l2;i++) dp[][i]=dp[][i-]+get_value('-',s2[i]);
dp_lcs(l1,l2);
printf("%d\n",dp[l1][l2]);
}
return ;
}

码风清奇,不喜勿喷

从这道题我们可以看出,有几个大佬当朋友还是有用的......

DP问题(3) : hdu 1080的更多相关文章

  1. HDU 1080 DP

    匹配两个人相似度. A,G,C.T.每两个都会有一个相应的值,给出两串基因.长度能够不一样,能够在基因中间加_使两串长度一样.然后有一个相应值.求最大相应值. 先做出相应的表 DP方程: x=dp[i ...

  2. hdu 1080 dp(最长公共子序列变形)

    题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G -  G ...

  3. hdu 1080 Human Gene Functions(DP)

    题意: 人类基因由A.C.G.T组成. 有一张5*5的基因表.每格有一个值,叫相似度.例:A-C:-3.意思是如果A和C配对, 则它俩的相似度是-3[P.S.:-和-没有相似度,即-和-不能配对] 现 ...

  4. HDU 1080

    http://acm.hdu.edu.cn/showproblem.php?pid=1080 二维最长公共子序列 #include <iostream> #include <cstd ...

  5. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  6. DP问题(2) : hdu 1421

    题目转自hdu 1421,题目传送门 题目大意: 给你n个物品,你要搬走2*k个(也就是搬k次) 每次搬需要花费v,v=(ai-aj)2 (i表示左手拿的物品重量,j表示右手拿的物品的重量) 要求所有 ...

  7. DP问题(1) : hdu 2577

    题目转自hdu 2577,题目传送门 题目大意: 现给你n个区分大小写的字符串,大小写可用Caps Lock和shift切换(学过计算机的都知道) 但是有一点需要注意(shift是切换,若现在是大写锁 ...

  8. dp or 贪心 --- hdu : Road Trip

    Road Trip Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 29 ...

  9. HDU 1080 Human Gene Functions

    最长公共子序列的变形 题目大意:给出两个基因序列,求这两个序列的最大相似度. 题目中的表格给出了两两脱氧核苷酸的相似度. 状态转移方程为: dp[i][j] = max(dp[i-1][j]+Simi ...

随机推荐

  1. 运维相关指标数据采集并ES入仓 - 运维笔记

    为了进行数字化IT治理,需要对一些应用进程相关指标进行采集并入库.收集到的应用指标数据最好要进行ES入仓,入到Kafka里面,并通过Kibana可视化展示. 需要进行采集的应用进程相关指标如下: ES ...

  2. 【前端知识体系-JS相关】虚拟DOM和Diff算法

    1.介绍一下vdom? virtual dom, 虚拟DOM 使用JS来模拟DOM结构 DOM变化的对比,放在JS层来做(图灵完备语言),提高效率 DOM操作非常昂贵(消耗性能) 2.Snabbdom ...

  3. CodeForce 176C Playing with Superglue

    Two players play a game. The game is played on a rectangular board with n × m squares. At the beginn ...

  4. POJ-1129 DFS染色+四色原理的应用

    OJ-ID:     POJ-1129 author:    Caution_X date of submission:    20190927 tags:    DFS+四色原理的应用 descri ...

  5. Window权限维持(一):注册表运行键

    在红队行动中在网络中获得最初的立足点是一项耗时的任务.因此,持久性是红队成功运作的关键,这将使团队能够专注于目标,而不会失去与指挥和控制服务器的通信.在Windows登录期间创建将执行任意负载的注册表 ...

  6. 2019-11-29-dotnet-core-使用-GBK-编码

    原文:2019-11-29-dotnet-core-使用-GBK-编码 title author date CreateTime categories dotnet core 使用 GBK 编码 li ...

  7. GAC 解释&路径

    GAC 全称是 Global Assembly Cache 作用是可以存放一些有很多程序都要用到的公共 Assembly ,例如 System.Data .System.Windows.Form 等等 ...

  8. @property与@xxx.setter的用法

    类中@property与@xxx.setter的方法介绍. 简单说,@property就是将定义的函数(方法)当作属性对象使用,不需要像调用函数那样去调用,而@xxx.setter是为@xxx的这样函 ...

  9. Linux nodejs 安装以及配置环境

    从官网中下载nodejs 打开官网 https://nodejs.org/en/download/ 复制拿到链接,下载nodejs wget https://nodejs.org/dist/v10.1 ...

  10. Java实现QQ邮件发送

    首先我们需要两个jar包,点击下面即可下载这两个包: JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 我们这里采用QQ邮箱发送邮件为例,代码如 ...