解题思路:这道题最开始看错题了,以为只能给长度小的那个字符串添加'-',就往“编辑距离”这个模型去想。其实这里是两个串都可以添加'-',所以模型一下子就简化了。这里可以用LCS的思路去做。

dp[i][j]表示两个串分别是前i个和前j个的最大价值。

dp[i][j] = max(dp[i-1][j-1] + score[A[i]][B[j]],max(dp[i-1][j] + score[A[i]][-], dp[i][j-1] + score[-][B[j]])),这里一定要注意不要犯这样的错误:i和j的字符相等,就想当然的认为它是从dp[i-1][j-1]转移过来的,实际上可能还会有别的匹配方式。这里老是犯错,所以一定要记住。

另外这里初始化也是要注意的地方。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int maxn = 105;
int n,m,dp[maxn][maxn],score[90][90];
char A[maxn],B[maxn];int main()
{int t;char tmp[maxn];scanf("%d",&t);score['A']['A'] = score['C']['C'] = score['G']['G'] = score['T']['T'] = 5;score['A']['C'] = score['C']['A'] = -1;score['G']['A'] = score['A']['G'] = -2; score['G']['C'] = score['C']['G'] = -3;score['T']['A'] = score['A']['T'] = -1; score['T']['C'] = score['C']['T'] = -2; score['T']['G'] = score['G']['T'] = -2;score[' ']['A'] = score['A'][' '] = -3; score[' ']['C'] = score['C'][' '] = -4; score[' ']['T'] = score['T'][' '] = -1; score[' ']['G'] = score['G'][' '] = -2;while(t--){cin >> n;cin >> A+1;cin >> m;cin >> B+1;memset(dp,0,sizeof(dp));for(int i = 1; i <= n; i++)dp[i][0] = dp[i-1][0] + score[A[i]][' '];for(int i = 1; i <= m; i++)dp[0][i] = dp[0][i-1] + score[' '][B[i]];for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++){dp[i][j] = max(dp[i-1][j-1] + score[A[i]][B[j]],max(dp[i-1][j] + score[A[i]][' '], dp[i][j-1] + score[' '][B[j]]));}cout << dp[n][m] << endl;}return 0;
}

hdu 1080(LCS变形)相关推荐

  1. hdu 5087(LIS变形)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5087 解题思路:这道题其实仔细想想很简单,次长LIS只有两种可能,一种就是等于LIS-1,一种就是LI ...

  2. hdu 5410(背包问题变形)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5410 解题思路:令dp[i][j][0]表示前i种物品,共j钱,不买第i种物品所能买到的最大值.dp[ ...

  3. hdu 1598(最小生成树变形)

    解题思路:这道题我一开始的思路是动规,dp_max[i][j]表示i-j的最大边,dp_min[i][j]表示i-j的最小边,可是这样会有问题,有可能最大边与最小边不在同一条路径上,这样就很麻烦了. ...

  4. HDU 1114(没有变形的完全背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 Piggy-Bank Time Limit: 2000/1000 MS (Java/Others ...

  5. HDU ACM 1181 变形课 (广搜BFS + 动态数组vector)-------第一次使用动态数组vector

    http://acm.hdu.edu.cn/showproblem.php?pid=1181 题意:给我若干个单词,若单词A的结尾与单词B的开头相同,则表示A能变成B,判断能不能从b开头变成m结尾. ...

  6. HDU 1080 Human Gene Functions

    DP,比较容易想到是2维DP,表示到第一个字符串的i和第二个字符串的j最大值是多少, 字符串下标的0在这里对应的i,j是1 #include<algorithm> #include< ...

  7. hdu 5256 LIS变形

    给一个数列,问最少修改多少个元素使数列严格递增.如果不是要求"严格"递增,那就是求最长不降子序列LIS,然后n-LIS就是答案.要严格递增也好办,输入的时候用每个数减去其下标处理一 ...

  8. 【HDU - 1080】Human Gene Functions(dp,可编辑距离类问题)

    题干: 给你两个DNA序列(长度不一定相同),你可以在其中任意位置上加入空格,使得最终他俩长度相同,最终相同长度的两个DNA序列会有个相似度比较(每个字符相对应的比较),问你如何放置这些空格使得总相似 ...

  9. Catching Cheaters (LCS变形)

    链接 题目大意: 给出两个字符串a, b,求max(4lcs(c, d) - |c| - |d|) ,其中,c,d是字符串a,b的子串. 思路: 记 f[i][j] a串前i个,b串前j个所能构成的最 ...

最新文章

  1. win messenger启动随outlook explorer
  2. [转]PCB 设计中敷铜的注意事项
  3. leetcode算法题--解码方法★
  4. 使用CSS3各个属性实现小人的动画
  5. 计算机不读三星硬盘分区,电脑磁盘分区指南!一分钟就学会
  6. 硬盘的转速是什么意思,有什么功能?
  7. KnockoutJS-快速入门
  8. PLSQL 申明和游标
  9. BugkuCTF-MISC题又一张图片,还单纯吗
  10. 【leetcode】Max Points on a Line
  11. innerHTML和outerHTML的区别
  12. Zabbix监控解决方案
  13. Matlab自带的曲线拟合程序
  14. 读懂金融危机必看的十四本书
  15. VUE3+TS 生成一些五线谱
  16. Pytorch:卷积神经网络-空洞卷积
  17. DBV命令行工具检测坏块
  18. 小米手机解BL锁、线刷详细教程,适用于小米全系列手机
  19. 数据分析案例-电影数据可视化分析
  20. 访谈完100个年入百万的自媒体人后,我总结了出了他们的共性

热门文章

  1. 神策 FM | 将定价作为产品竞争优势的 5 种策略
  2. 硅谷蓝图创始人 Patrick:数据驱动规模化增长
  3. 用户路径分析:揭秘你的用户行为偏好习惯
  4. 行业谈实践,客户送祝福
  5. 云计算的下半场:云原生
  6. hdu1025 Constructing Roads In JGShining#39;s Kingdom (nlogn的LIS)
  7. iftop是一个很好用的实时流量监测程序,跟使用iftop查看linux连接进程占用的实时流量...
  8. spring mvc3中JACKSON序列化日期格式的问题 - 墙头草的Java - BlogJava
  9. 敏捷个人手机应用:如何使用时中法习惯
  10. golang源码安装和学习环境搭建