DP问题(3) : hdu 1080
题目转自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的更多相关文章
- HDU 1080 DP
匹配两个人相似度. A,G,C.T.每两个都会有一个相应的值,给出两串基因.长度能够不一样,能够在基因中间加_使两串长度一样.然后有一个相应值.求最大相应值. 先做出相应的表 DP方程: x=dp[i ...
- hdu 1080 dp(最长公共子序列变形)
题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G - G ...
- hdu 1080 Human Gene Functions(DP)
题意: 人类基因由A.C.G.T组成. 有一张5*5的基因表.每格有一个值,叫相似度.例:A-C:-3.意思是如果A和C配对, 则它俩的相似度是-3[P.S.:-和-没有相似度,即-和-不能配对] 现 ...
- HDU 1080
http://acm.hdu.edu.cn/showproblem.php?pid=1080 二维最长公共子序列 #include <iostream> #include <cstd ...
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- DP问题(2) : hdu 1421
题目转自hdu 1421,题目传送门 题目大意: 给你n个物品,你要搬走2*k个(也就是搬k次) 每次搬需要花费v,v=(ai-aj)2 (i表示左手拿的物品重量,j表示右手拿的物品的重量) 要求所有 ...
- DP问题(1) : hdu 2577
题目转自hdu 2577,题目传送门 题目大意: 现给你n个区分大小写的字符串,大小写可用Caps Lock和shift切换(学过计算机的都知道) 但是有一点需要注意(shift是切换,若现在是大写锁 ...
- dp or 贪心 --- hdu : Road Trip
Road Trip Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 29 ...
- HDU 1080 Human Gene Functions
最长公共子序列的变形 题目大意:给出两个基因序列,求这两个序列的最大相似度. 题目中的表格给出了两两脱氧核苷酸的相似度. 状态转移方程为: dp[i][j] = max(dp[i-1][j]+Simi ...
随机推荐
- 【转】pywinauto教程
一.环境安装 1.命令行安装方法 pip install pywinauto==0.6.7 2.手动安装方法 安装包下载链接:pyWin32: python调用windows api的库https:/ ...
- H3C 12508 收集诊断信息
案例:H3C 12508单板卡出现remove状态,需要配合研发收集诊断信息. (此文档只展示研发要求的诊断信息.) 总体:12500交换机返回三种文件----故障时诊断信息,主备单板的日志文 ...
- Python字典(Dictionary)update()方法
原文连接:https://www.runoob.com/python/att-dictionary-update.html Python字典(dictionary)update()函数把字典dict2 ...
- axios和fetch区别对比
axios axios({ method: 'post', url: '/user/12345', data: { firstName: 'Fred', lastName: 'Flintstone' ...
- 转 让FPGA替代GPU的6大顾虑,你确定不看看吗?
最近FPGA又频频被各AI领域的巨头看好,比如微软.百度.科大讯飞都对FPGA应用前景有所期待.那么如果让你选择FPGA作为AI计算系统的主力军,你会有什么样的顾虑? 这几天,已经退役的AlphaGo ...
- 在 React 项目中引入 GG-Editor 编辑可视化流程
蚂蚁金服数据可视化团队曾经开源了一款G6-Editor,但后来停止了对外支持,学习成本太高 好在后来他们团队的大牛高力结合 React + G6 开源了一个 GG-Editor(其实就是G6-Edit ...
- 【初识Spring】对象(Bean)实例化及属性注入(xml方式)
title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- #初识S ...
- AT+CNUM获取不到手机号
原因是卡商没有写入SIM卡 解决办法 手动写入 1. 先确认SIM卡的本机号码 2. 选择电话本存储 /* AT+CPBS Select phonebook memory storage " ...
- Django 练习班级管理系统三 -- 分页
在 user_manager 项目下创建一个 python package:utils,里面创建一个 page.py 文件 page.py 文件内容为: # 创建一个 PagerHelper 类 cl ...
- [PHP] 项目实践中的自动加载实现
1.使用spl_autoload_register函数注册一个自己定义的自动加载函数2.当在代码中new一个不存在的类的时候,上面的函数会被调用,不存在的类名会被作为参数传入该函数中3.兼容了两种方式 ...