一道字符串DP,然而不需要状压之类的玄学操作

题目大意:给你两个串,由'A','C','G','T'组成,现在你可以在这两个串中的某些位置插入'-',最终要使得它们的长度相等

给出两个字符匹配时的匹配度表格(题面中给出),让你求如何添加'-'使得总匹配度最大

很简单的DP,我们用f[i][j]表示使用了第一个串中前i个字符,第二个串中前j个字符(注意一定是使用了,即人为填上去的'-'不算)

然后对于每一个位置都有三种选择:

  • 让两个串相应位置上的字符直接匹配,即f[i][j]=max(f[i][j],f[i-1][j-1]+g[s1[i]][s2[j]]

  • 在第一个串中填入一个'-',即f[i][j]=max(f[i][j],f[i][j-1]+g['-'][s2[j]]

  • 在第二个串中填入一个'-',即f[i][j]=max(f[i][j],f[i-1][j]+g[s1[i]]['-']

最后的ans就是f[len1][len2]

CODE

#include<cstdio>
#include<cstring>
using namespace std;
const int N=105,g[5][5]=
{
{5,-1,-2,-1,-3},
{-1,5,-3,-2,-4},
{-2,-3,5,-2,-2},
{-1,-2,-2,5,-1},
{-3,-4,-2,-1,0},
};
int f[N<<1][N<<1],t,len1,len2;
char s1[N],s2[N];
inline int get(char ch)
{
if (ch=='A') return 0;
if (ch=='C') return 1;
if (ch=='G') return 2;
if (ch=='T') return 3;
if (ch=='-') return 4;
}
inline int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
register int i,j; scanf("%d",&t);
while (t--)
{
scanf("%d",&len1); scanf("%s",s1+1);
scanf("%d",&len2); scanf("%s",s2+1);
memset(f,167,sizeof(f)); f[0][0]=0;
for (i=1;i<=len1;++i)
f[i][0]=f[i-1][0]+g[get(s1[i])][get('-')];
for (i=1;i<=len2;++i)
f[0][i]=f[0][i-1]+g[get('-')][get(s2[i])];
for (i=1;i<=len1;++i)
for (j=1;j<=len2;++j)
{
f[i][j]=max(f[i][j],f[i-1][j]+g[get(s1[i])][get('-')]);
f[i][j]=max(f[i][j],f[i][j-1]+g[get('-')][get(s2[j])]);
f[i][j]=max(f[i][j],f[i-1][j-1]+g[get(s1[i])][get(s2[j])]);
}
printf("%d\n",f[len1][len2]);
}
return 0;
}

其实这个很显然也可以滚存,但我实在懒得写了

POJ1080的更多相关文章

  1. 【poj1080】 Human Gene Functions

    http://poj.org/problem?id=1080 (题目链接) 题意 给出两个只包含字母ACGT的字符串s1.s2,可以在两个字符串中插入字符“-”,使得s1与s2的相似度最大. Solu ...

  2. LCS poj1080

    题目链接:https://vjudge.net/problem/POJ-1080 参考博客:https://yq.aliyun.com/ziliao/372259 题意:给两个字符串,只含有'A',' ...

  3. POJ-1080 Human Gene Functions---类似LCS

    题目链接: https://cn.vjudge.net/problem/POJ-1080 题目大意: 给定两组序列,要你求出它们的最大相似度,每个字母与其他字母或自身和空格对应都有一个打分,求在这两个 ...

  4. poj1080 dp

    //Accepted 200 KB 0 ms //dp //dp[i][j]表示s1用前i个,s2用前j个字符能得到的最大分数 //dp[i][j]=max(dp[i-1][j]+score[s1[i ...

  5. POJ1080 Human Gene Functions(LCS)

    题目链接. 分析: 和 LCS 差不多. #include <iostream> #include <cstdio> #include <cstdlib> #inc ...

  6. POJ1080 Human Gene Functions 动态规划 LCS的变形

    题意读了半年,唉,给你两串字符,然后长度不同,你能够用'-'把它们补成同样长度,补在哪里取决于得分,它会给你一个得分表,问你最大得分 跟LCS非常像的DP数组 dp[i][j]表示第一个字符串取第i个 ...

  7. POJ1080(LCS变形)

    Human Gene Functions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  8. poj1080 - Human Gene Functions (dp)

    题面 It is well known that a human gene can be considered as a sequence, consisting of four nucleotide ...

  9. poj分类 很好很有层次感。

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

随机推荐

  1. 页面可见性判断:document.hidden与visibilitychange事件

    我们需要在特定的时候判断页面的显示状态,例如:当视频加载到可播放状态时,根据用户是否停留在当前页面来决定是否开始自动播放.页面的展示的状态的判断就需要用到html5新增的一个api:document. ...

  2. mysql如何修改开启允许远程连接

    关于mysql远程连接的问题,大家在公司工作中,经常会遇到mysql数据库存储于某个人的电脑上,大家要想连接mysql服务,装有mysql服务的电脑就必须开启远程连接 第一步,用dos连接上你的数据库 ...

  3. sublime中如何用less实现css预编译

    实现css预编译的方式有很多,听说glup很流行而且功能也很强大,但是就目前的工作而言,仅要css预编译和YUIcompress就够了,接下来切入正题 Less 是一门 CSS 预处理语言,它扩展了 ...

  4. Python 3前言

    Python具有简单.易学.免费.开源.可移植.可扩展.可嵌入.面向对象等优点,它的面向对象甚至比java和C#.net更彻底. 作为一种通用语言,Python几乎可以用在任何领域和场合,角色几乎是无 ...

  5. LeetCode题解之N-ary Tree Postorder Traversal

    1.题目描述 2.问题分析 递归. 3.代码 vector<int> postorder(Node* root) { vector<int> v; postNorder(roo ...

  6. hibernate数据库操作基础

    1.根据主键查询 2.getSession().createSQLQuery(sql)和session.createQuery(sql) 3.Seeion的其他方法  4.Hibernate Crit ...

  7. Jemeter 连接数据库

    1.打开Jmeter添加测试计划,(http://central.maven.org/maven2/mysql/mysql-connector-java/6.0.6/mysql-connector-j ...

  8. 关于Apache连接数限制的设置

    昨天晚上收到监视团队的电话,说web服务器连不上.(作为DBA,这貌似超出了我的工作范畴啊...) 于是马上VPN连上服务器,发现网络负载均衡下的两台Apache服务器都没有响应,而服务器OS层面上正 ...

  9. MySQL安全策略

    0.导读 MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,如何保证MySQL的数据安全? MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,如何保证M ...

  10. pt-osc全解pt-online-schema-change

    MySQL 大字段的DDL操作:加减字段.索引.修改字段属性等,在5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响.在5.1之后随着Plugin Innodb的出现在线加索引的提高了很多 ...