hdu1080 Human Gene Functions【动态规划】
来源:互联网 发布:k线图 知乎 编辑:程序博客网 时间:2024/05/13 19:58
解题思路:
f[ i ] [ j ] 表示匹配完第一条的第 i 个和第二条的第 j 个(均可以与空格进行匹配);
① f [ i - 1 ] [ j ] + v (第一条第 i 个与空格匹配后增加的相似度) ,当该值大于 f 原值时就用它优化 f;
② f [ i ] [ j - 1 ] + v (第二条第 j 个与空格匹配后增加的相似度) ,当该值大于 f 原值时就用它优化 f;
③ f [ i - 1 ] [ j - 1 ] + v(第一条第 i 个与第二条第 j 个匹配后增加的相似度) ,当该值大于 f 原值时就用它优化 f;
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<queue>#include<vector>#define ll long longusing namespace std;int getint() { int i=0,f=1;char c; for(c=getchar();(c<'0'||c>'9')&&c!='-';c=getchar()); if(c=='-')c=getchar(),f=-1; for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0'; return i*f;}const int N=105;const int 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 T,n,m,a[N],b[N],f[N][N];char s[N],t[N];int main(){ //freopen("lx.in","r",stdin); T=getint(); while(T--) { memset(f,0,sizeof(f)); n=getint();scanf("%s",s+1); m=getint();scanf("%s",t+1); for(int i=1;i<=n;i++) if(s[i]=='A')a[i]=0; else if(s[i]=='C')a[i]=1; else if(s[i]=='G')a[i]=2; else if(s[i]=='T')a[i]=3; for(int i=1;i<=m;i++) if(t[i]=='A')b[i]=0; else if(t[i]=='C')b[i]=1; else if(t[i]=='G')b[i]=2; else if(t[i]=='T')b[i]=3; for(int i=1;i<=n;i++) f[i][0]=f[i-1][0]+g[a[i]][4]; for(int i=1;i<=m;i++) f[0][i]=f[0][i-1]+g[4][b[i]]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) f[i][j]=max(f[i-1][j-1]+g[a[i]][b[j]],max(f[i-1][j]+g[a[i]][4],f[i][j-1]+g[4][b[j]])); cout<<f[n][m]<<'\n'; }}
阅读全文
0 0
- hdu1080 Human Gene Functions (动态规划)
- hdu1080 Human Gene Functions【动态规划】
- hdu1080---Human Gene Functions
- hdu1080 Human Gene Functions
- hdu1080 Human Gene Functions()
- HDU1080-Human Gene Functions
- hdu1080 Human Gene Functions DP
- hdu1080 Human Gene Functions (DP动态规划,带权最长公共子串)
- poj 1080 Human Gene Functions动态规划
- hdu 1080 Human Gene Functions 动态规划
- POJ 1080 Human Gene Functions(动态规划)
- [POJ 1080]Human Gene Functions(动态规划)
- zoj1027 Human Gene Functions 动态规划
- Human Gene Functions(动态规划)
- hdu1080 Human Gene Functions(LCS的变型)
- hdu1080 - Human Gene Functions 最长公共子序列推广
- hdu1080 Human Gene Functions(带权值最长公共子序列)
- acm pku 1080 Human Gene Functions的动态规划方法
- 【面向JS--闭包】
- JAVA远程debug
- laravel的启动过程解析 服务容器Ioc
- UE4材质之图像处理
- linux信号量 signal
- hdu1080 Human Gene Functions【动态规划】
- 最小二乘法C实现
- 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)
- ConfigReader(十五)—— ReadGuideKillHeroTaskConfig
- Java项目练习之答答租车系统
- libevent源码学习----io多路复用的封装和使用
- DNS服务配置
- linux内核内存管理学习之三(slab分配器)
- NATS核心技术基本介绍