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(最长公共子序列变种)的更多相关文章

  1. POJ 1458 Common Subsequence(最长公共子序列LCS)

    POJ1458 Common Subsequence(最长公共子序列LCS) http://poj.org/problem?id=1458 题意: 给你两个字符串, 要你求出两个字符串的最长公共子序列 ...

  2. POJ 1159 Palindrome(最长公共子序列)

    http://poj.org/problem?id=1159 题意: 给出一个字符串,计算最少要插入多少个字符可以使得该串变为回文串. 思路: 计算出最长公共子序列,再用原长-LCS=所要添加的字符数 ...

  3. POJ 1458 Common Subsequence 最长公共子序列

    题目大意:求两个字符串的最长公共子序列 题目思路:dp[i][j] 表示第一个字符串前i位 和 第二个字符串前j位的最长公共子序列 #include<stdio.h> #include&l ...

  4. hdu 1080 dp(最长公共子序列变形)

    题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G -  G ...

  5. POJ 1159:Palindrome 最长公共子序列

    Palindrome Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 56273   Accepted: 19455 Desc ...

  6. POJ 1458 Common Subsequence 最长公共子序列 LCS

    LCS #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> ...

  7. 【POJ 2250】Compromise(最长公共子序列LCS)

    题目字符串的LCS,输出解我比较不会,dp的时候记录从哪里转移来的,之后要一步一步转移回去把解存起来然后输出. #include<cstdio> #include<cstring&g ...

  8. poj 1080 ——Human Gene Functions——————【最长公共子序列变型题】

    Human Gene Functions Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17805   Accepted:  ...

  9. poj 1080 Human Gene Functions (最长公共子序列变形)

    题意:有两个代表基因序列的字符串s1和s2,在两个基因序列中通过添加"-"来使得两个序列等长:其中每对基因匹配时会形成题中图片所示匹配值,求所能得到的总的最大匹配值. 题解:这题运 ...

随机推荐

  1. 1.2UISwitch 1.3 自定义UIswitch 1.4pickerView

    1.2 UISwitch创建和使用开关 问题你想给你的用户打开一个选项或关闭的能力.解使用UISwitch类. 讨论该UISwitch类提供像在图1-7为自动大写,自动校正,等等所示的开/ ...

  2. C# 对象拷贝问题 =等同于浅拷贝

    大家都知道,在C#中变量的存储分为值类型和引用类型两种,而值类型和引用类型在数值变化是产生的后果是不一样的,值类型我们可以轻松实现数值的拷贝,那么引用类型呢,在对象拷贝上存在着一定的难度.     下 ...

  3. KeCode对照表(键盘按键的获取)

    KeyCode键盘对照表: http://www.cnblogs.com/furenjian/articles/2957770.html

  4. Activity 启动模式

    Activity的启动模式有四种,分别是standard.singleTop.singleTask.singleInstance.   Android是通过回退栈的模式来管理Activity实例的.栈 ...

  5. 前缀 树 背单词(Remember the Word,LA 3942)

    已哭瞎. 搞了2个多小时的错误居然是在  没有初始化............教训:每个例子一定要考虑到初始化问题.! 每个节点存了一个数组  该数组记录的有26个大小  0-25分别表示记录表示'a' ...

  6. Jquery对select的操作(附日历天数变化代码)

    转载请注明出处. 逃不开传统的四种操作:增.删.改.查. <四处搜刮了jquery对select操作的代码,汇集一下,方便以后查看.日历天数变化代码为原创.> [增]: $("# ...

  7. 基本event封装:阻止冒泡、默认事件等

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> ...

  8. Oracle的大数据类型,BIG DATA TYPE

    1.CLOB 字符LOB类型,主要用于存储大型英文字符 2.NCLOB 国际语言字符LOB类型,主要用于存储大型非英文字符 3.BLOB 二进制LOB类型,主要用于存储二进制数据 4.BFILE 二进 ...

  9. iter, yield与enumerate的实现

    模拟实现一个enumerate函数 def myEnumerate(seq, start=0): results = [] n = start for i in seq: results.append ...

  10. 当x含有偶数个1,返回1,否则为0。

    题目描述: /* Return 1 when x contains an even number of 1s;0 otherwise. Assume W=32 */ int even_ones(uns ...