题目转自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. 优雅的解决springboot Aop @Cacheable this不生效

    问题描述:在同一个类中springAop不生效,例如在同一个类中没有 @Cacheable的方法调用本类有 @Cacheable的方法,则缓存不会设置. 原因:springaop基于java prox ...

  2. LeetCode 133:克隆图 Clone Graph

    题目: 给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆).图中的每个节点都包含它的值 val(Int) 和其邻居的列表(list[Node]). Given a reference of a ...

  3. 使用selenium爬虫抓取数据

    写在前面 本来这篇文章该几个月前写的,后来忙着忙着就给忘记了.ps:事多有时候反倒会耽误事.几个月前,记得群里一朋友说想用selenium去爬数据,关于爬数据,一般是模拟访问某些固定网站,将自己关注的 ...

  4. jquery ajax怎么使用jsonp跨域访问

    在项目中使用接口的比较多,在客户端跨域访问,jquery中只能使用jquery ajax的jsonp方法. 值得注意的是,jQuery.ajax()只支持get方式的跨域,post的方式是不支持的.& ...

  5. java文件操作File类

    1.文件路径操作 测试方法 @Test public void test5() { StringBuffer succBuffer = new StringBuffer("D:\\home\ ...

  6. springboot单元测试@test的使用

    @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) public class Springtest { ...

  7. 【UOJ#308】【UNR#2】UOJ拯救计划

    [UOJ#308][UNR#2]UOJ拯救计划 题面 UOJ 题解 如果模数很奇怪,我们可以插值一下,设\(f[i]\)表示用了\(i\)种颜色的方案数. 然而模\(6\)这个东西很有意思,\(6=2 ...

  8. kali渗透综合靶机(三)--bulldog2靶机

    kali渗透综合靶机(三)--bulldog2靶机 靶机地址:https://download.vulnhub.com/bulldog/Bulldog2.ova 一.主机发现 1.netdiscove ...

  9. linq,sqlmethods,like

    LINQ to SQL will translate .NET methods in this manner: text.StartsWith(...) = LIKE ...% text.Contai ...

  10. Python中的常见特殊方法—— del方法

    __del__() 方法用于销毁Python对象——在任何Python对象将被系统回收的时候,系统都会自动调用这个方法.但是不要以为对一个变量执行del操作,该变量引用的对象就会被回收,当然不是,如果 ...