hdu 1080 Human Gene Functions(DP)
题意:
人类基因由A、C、G、T组成。
有一张5*5的基因表。每格有一个值,叫相似度。例:A-C:-3。意思是如果A和C配对, 则它俩的相似度是-3【P.S.:-和-没有相似度,即-和-不能配对】
现在给两条基因片段。(长度不一定相等)
现在你要在两条基因片段中插入若干个-(空白基因),使得两个基因片段长度相等,且得到的整体相似度的值最大。【再次P.S.:-和-不能配对】
思路:
因为-和-不能匹配,所以插入的-的个数是有限的。
str1的第一个基因可以与str1的第一个或-配对。然后,,,,很快就看到了DP结构,,,
和最长公共子串一样滴的意思,,,
DP方程:dp[i][j]:str1的前i个和str2的前j个能获得的最大相似度值。
看代码,,
代码:
int l1,l2;
char s1[105], s2[105];
int S1[105], S2[105];
int a[6][6]={{5,-1,-2,-1,-3},{-1,5,-3,-2,-4},{-2,-3,5,-2,-2},{-1,-2,-2,5,-1},{-3,-4,-2,-1,inf}};
int dp[105][105]; int maxx(int a,int b,int c){
int t=max(a,b);
return max(t,c);
} int main(){ int T;
cin>>T;
while(T--){
scanf("%d",&l1);
scanf("%s",s1);
scanf("%d",&l2);
scanf("%s",s2);
rep(i,0,l1-1){
if(s1[i]=='A') S1[i]=0;
else if(s1[i]=='C') S1[i]=1;
else if(s1[i]=='G') S1[i]=2;
else S1[i]=3;
}
rep(i,0,l2-1){
if(s2[i]=='A') S2[i]=0;
else if(s2[i]=='C') S2[i]=1;
else if(s2[i]=='G') S2[i]=2;
else S2[i]=3;
} dp[0][0]=0;
rep(i,0,l2-1){
dp[0][i+1]=dp[0][i]+a[4][S2[i]];
}
rep(i,0,l1-1){
dp[i+1][0]=dp[i][0]+a[S1[i]][4];
}
rep(i,1,l1){
rep(j,1,l2){
dp[i][j]=maxx( dp[i-1][j-1]+a[S1[i-1]][S2[j-1]],dp[i-1][j]+a[S1[i-1]][4],dp[i][j-1]+a[4][S2[j-1]] );
}
}
printf("%d\n",dp[l1][l2]);
} return 0;
}
hdu 1080 Human Gene Functions(DP)的更多相关文章
- poj 1080 Human Gene Functions(lcs,较难)
Human Gene Functions Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19573 Accepted: ...
- 刷题总结——Human Gene Functions(hdu1080)
题目: Problem Description It is well known that a human gene can be considered as a sequence, consisti ...
- HDU 1080 Human Gene Functions - 最长公共子序列(变形)
传送门 题目大意: 将两个字符串对齐(只包含ACGT,可以用'-'占位),按照对齐分数表(参见题目)来计算最后的分数之和,输出最大的和. 例如:AGTGATG 和 GTTAG ,对齐后就是(为了表达对 ...
- POJ 1080 Human Gene Functions 【dp】
题目大意:每次给出两个碱基序列(包含ATGC的两个字符串),其中每一个碱基与另一串中碱基如果配对或者与空串对应会有一个分数(可能为负),找出一种方式使得两个序列配对的分数最大 思路:字符串动态规划的经 ...
- HDU 1080 Human Gene Functions
最长公共子序列的变形 题目大意:给出两个基因序列,求这两个序列的最大相似度. 题目中的表格给出了两两脱氧核苷酸的相似度. 状态转移方程为: dp[i][j] = max(dp[i-1][j]+Simi ...
- UVALive 2324 Human Gene Functions(动态规划)
题意:求出将两个字符串改成一样长度所能形成最大的相似度. 思路:这个可以说是编辑距离的一个变形,编辑距离最终状态时要两个字符串完全一致,这个就是要求长度一样,而且这个只允许插入“—”这一个字符.模仿编 ...
- poj 1080 ——Human Gene Functions——————【最长公共子序列变型题】
Human Gene Functions Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17805 Accepted: ...
- POJ 1080 Human Gene Functions -- 动态规划(最长公共子序列)
题目地址:http://poj.org/problem?id=1080 Description It is well known that a human gene can be considered ...
- HDU 1864 最大报销额(DP)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1864 题目: 最大报销额 Time Limit: 1000/1000 MS (Java/Others) ...
随机推荐
- mysql中varchar类型和datetime类型字段进行比较
我是在mysql5.7版本进行比较 表a的字段order_no和表iwebshop_tmp的字段order_no一样 需要更新iwebshop_member_order表的datetime类型expi ...
- ubuntu提示:无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)
root@uni-virtual-machine:/home/uni# apt install apt-transport-https ca-certificates curl software-pr ...
- $.ajax 常用的套路
$.ajax 常用的套路 (function(){ window.webApi = new Object(); webApi.get = function(url,data,callback){ $. ...
- pyqt5读取文本框内容,输出到日志框(QTextBrowser)
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QAction,QLabel,QLineEdit,QPushButt ...
- P2490-[SDOI2011]黑白棋【博弈论,dp】
正题 题目链接:https://www.luogu.com.cn/problem/P2490 题目大意 一个长度为\(n\)的棋盘上放下\(k\)个棋子. 第一个要是白色,下一个要是黑色,在下一个是白 ...
- 【C++ Primer Plus】编程练习答案——第3章
1 void ch3_1() { 2 using namespace std; 3 unsigned int factor = 12; 4 unsigned int inch, feet; 5 cou ...
- SpringBoot入门报错 Whitelabel Error Page的总结
刚入门SpringBoot,编写helloControl类,去访问本地端口,无缘无故报了这个错误 Whitelabel Error Page 总结了下,目前我碰到的有三种会导致这种情况 1.当你的 S ...
- IDEA Web渲染插件开发(二)— 自定义JsDialog
<IDEA Web渲染插件开发(一)>中,我们了解到了如何编写一款用于显示网页的插件,所需要的核心知识点就是IDEA插件开发和JCEF,在本文中,我们将继续插件的开发,为该插件的JS Di ...
- Linux Bash命令杂记(cut sort uniq wc tee)
Linux Bash命令杂记(cut sort uniq wc tee) 数据流重定向 标准输入(stdin):代码为0,使用<或<<: 标准输出(stdout):代码为1,使用&g ...
- Python中生成器的理解
1.生成器的定义 在Python中一边循环一边计算的机制,称为生成器 2.为什么要有生成器 列表所有的数据都存在内存中,如果有海量的数据将非常耗内存 如:仅仅需要访问前面几个元素,那后面绝大多数元素占 ...