poj 1080 zoj 1027(最长公共子序列变种)
来源:互联网 发布:淘宝的心怎么快速升级 编辑:程序博客网 时间:2024/06/05 03:34
http://poj.org/problem?id=1080
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=27
/*zoj 1027 poj 1080 思路: 三种状态,取最大值:s1[i]和s2[j]配 :dp[i-1][j-1]+cost[my[s1[i]]][my[s2[j]]];s1[i]和'-' 配: dp[i-1][j]+cost[my[s1[i]]][my['-']];s2[j]和'-' 配: dp[i][j-1]+cost[my['-']][my[s2[j]]];注意边界:d[i][0]= cost[my[s1[i]]][my['-']]+dp[i-1][0]; 只能全部和'-'配,同理: dp[0][j]=cost[my['-']][my[s2[j]]]+dp[0][j-1];*/#include <iostream>#include <map>#include <cstring>#include <string>using namespace std;int cost[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,-100000005}};int dp[1005][1005];string s1,s2;map<char,int> my;int main(int argc, char *argv[]){int t,i,n,j,m;my['A']=0; my['C']=1; my['G']=2; my['T']=3; my['-']=4;cin>>t;while(t--){cin>>n>>s1>>m>>s2;s1='0'+s1; s2='0'+s2;dp[0][0]=0;for(i=1;i<=n;i++)dp[i][0]=cost[my[s1[i]]][my['-']]+dp[i-1][0];for(j=1;j<=m;j++)dp[0][j]=cost[my['-']][my[s2[j]]]+dp[0][j-1];for(i=1;i<=n;i++)for(j=1;j<=m;j++){int t1,t2,t3;t1=dp[i-1][j-1]+cost[my[s1[i]]][my[s2[j]]];t2=dp[i-1][j]+cost[my[s1[i]]][my['-']];t3=dp[i][j-1]+cost[my['-']][my[s2[j]]];t1=max(t1,t2); t1=max(t1,t3);dp[i][j]=t1;}cout<<dp[n][m]<<endl;}return 0;}
- poj 1080 zoj 1027(最长公共子序列变种)
- POJ 1080(最长公共子序列)
- 最长公共子序列变种——带权的最长公共子序列
- ZOJ 1027 Human Gene Functions(最长公共子序列)
- zoj 1733【最长公共子序列DP】
- POJ 1458 最长公共子序列
- POJ 1458 最长公共子序列
- 最长公共子序列 POJ 2250
- POJ 1458 最长公共子序列
- poj 1458 最长公共子序列
- poj 2250 最长公共子序列
- poj 1458 最长公共子序列
- poj Common Subsequence 最长公共子序列
- POJ 3080 多个串最长公共子序列
- POJ 2127 最长公共上升子序列
- POJ 1156 Palindrome (最长公共子序列)
- poj 1458 最长公共子序列
- POJ 1458最长公共子序列(DP)
- rs.getMetaData()从结果集获取表结构
- centos5.5安装redmine2.2.3
- IE6 下js中函数未定义
- PLSQL数据导入导出问题
- Kitty's Game zoj3644(dp+stl)
- poj 1080 zoj 1027(最长公共子序列变种)
- hdu(1175)连连看
- HDU 4679 Terrorist’s destroy(树形dp | 多校8)
- 面向对象三大基本特性,五大基本原则
- erlang优化
- 命令行参数
- mfc菜单
- NumPy使用手记
- Objective-C基础教程读书笔记(7)