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. 关于javascript的沙箱模式以及缓存方法

    在javascript函数代码中,经常会不经意出现全局变量,很可能造成对全局对象的污染,由于这种弊端的存在,那么沙箱模式油然而生.沙箱模式又称为沙盒模式.隔离模式.在js中只有函数可以限定变量作用域, ...

  2. JQuery DataTable插件

    参考文件: http://blog.csdn.net/xuechongyang/article/details/8424897 http://blog.csdn.net/llhwin2010/arti ...

  3. SSIS 实例 从Ftp获取多个文件并对数据库进行增量更新。

    整个流程 Step 1 放置一个FTP Task 将远程文件复制到本地 建立FTP链接管理器后 Is LocalPatchVariable 设置为Ture 并创建一个变量设置本地路径 Operatio ...

  4. Filter 字符编码Filter 一

    使用字符编码Filter package com.helloweenvsfei.filter; import java.io.IOException; import javax.servlet.Fil ...

  5. CSS Select 标签取选中文本值

    $("#userDep").find("option:selected").text()

  6. PHP CI框架最近学到的内容

    CI框架配置方面注意的细节 在config里面的database.php里面是和数据库配置相关的内容 $db['default'] = array( 'dsn' => '', 'hostname ...

  7. 城通网盘,千军万马,千脑网盘,119g网盘哪个适合做网赚?

    转载请注明文章来自 [ofiicexie] 网盘网赚已经流行了有一段时间了,国内流行的几个网盘有城通,千军万马,千脑,119g,今天小编写以此文来比较分析一下这几个网盘的优缺点. 这里,我特意做了个这 ...

  8. Delphi 常用属性说明(超长)

    Delphi组件的常用事件Onclick——当单击时触发这个事件中的代码Onchange——当改变该组件内容时触发其中的代码Oncreate——当创建时触发这个事件中的代码Onclose——当关闭的时 ...

  9. JAVA FILE or I/O学习 - I/O流操作:FileInputStream、FileOutputStream、ObjectInputStream、ObjectOutputStream、InputStreamReader、OutputStreamWriter等

    public class IOStreamKnow { /*********************************文件读写方式:字节流**************************** ...

  10. poj 2533 Longest Ordered Subsequence(线性dp)

    题目链接:http://poj.org/problem?id=2533 思路分析:该问题为经典的最长递增子序列问题,使用动态规划就可以解决: 1)状态定义:假设序列为A[0, 1, .., n],则定 ...