题目: http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1305

这个题就是一个类似公共子串的dp,但是加了权值,其实还是很简单。

当匹配时相似程度是5,不匹配是-4,添加空隙是-7。那么dp[i][j]的值就来自于三个方式:

1、在s2[j]后添加空隙,那么相似程度就是dp[i][j-1] - 7

2、在s1[i]后添加空隙,那么相似程度就是dp[i-1][j] - 7

3、直接拿s1[i]和s2[j]匹配,如果匹配相似程度就是dp[i-1][j-1] + 5,如果不匹配相似程度就是dp[i-1][j-1] - 4

最后找一下字典序最小的,就是这样了。。。就是代码写的搓了一点。

 #include <stdio.h>
#include <string.h>
#include <algorithm> int dp[][];
char s1[], s2[][]; int main()
{
int t, ans = , x;
scanf("%s %d", s1, &t);
int n = strlen(s1);
for(int item = ; item < t; item++)
{
scanf("%s", s2[item]);
int m = strlen(s2[item]);
dp[][] = ;
for(int i = ; i <= n; i++)
dp[i][] = dp[i-][] - ;
for(int j = ; j <= m; j++)
dp[][j] = dp[][j-] - ;
for(int i = ; i <= n; i++)
{
for(int j = ; j <= m; j++)
{
dp[i][j] = std::max(std::max(dp[i-][j] - , dp[i][j-] - ), dp[i-][j-] + (s1[i-] == s2[item][j-] ? : -));
}
}
if(dp[n][m] > ans || (dp[n][m] == ans && strcmp(s2[x], s2[item]) > ))
{
ans = dp[n][m];
x = item;
}
}
printf("%d\n%s\n", ans, s2[x]);
return ;
}

SDUT 1305 查找基因序列问题 dp的更多相关文章

  1. usaco No Change, 2013 Nov 不找零(二分查找+状压dp)

    Description 约翰带着 N 头奶牛在超市买东西,现在他们正在排队付钱,排在第 i 个位置的奶牛需要支付 Ci 元.今天说好所有东西都是约翰请客的,但直到付账的时候,约翰才意识到自己没带钱,身 ...

  2. sdut 2840 Best string Orz~ (dp)

    题目 题意:有n1个o, n2个r, n3个z, n4个~, 求有多少种组合使 组合出来的字符串的任意前缀都满足 o的个数>=r的个数, r的个数>=z的个数 …………………… 思路:递推 ...

  3. Tyvj - 1305 单调队列优化dp

    今天有点头痛就不写具体细节了,贴完走人 #include<iostream> #include<algorithm> #include<cstdio> #inclu ...

  4. [ZJOI2010]基站选址,线段树优化DP

    G. base 基站选址 内存限制:128 MiB 时间限制:2000 ms 标准输入输出 题目类型:传统 评测方式:文本比较   题目描述 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离 ...

  5. [LeetCode] Longest Increasing Subsequence 最长递增子序列

    Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...

  6. Longest Increasing Subsequence

    很久不写算法了== 写个东西练练手 最长上升子序列 输入n,然后是数组a[ ]的n个元素 输出最长上升子序列的长度 一.最简单的方法复杂度O(n * n) DP[ i ] 是以a[ i ] 为结尾的最 ...

  7. LIS

    五:LIS 概念 最长上升子序列(Longest Increasing Subsequence,LIS),在计算机科学上是指一个序列中最长的单调递增的子序列.比如一个序列31 2 6 3 8,他的最长 ...

  8. [LeetCode] 300. Longest Increasing Subsequence 最长递增子序列

    Given an unsorted array of integers, find the length of longest increasing subsequence. Example: Inp ...

  9. 【动态规划】ZZNU-OJ- 2054 : 油田

    2054 : 油田 (一个神奇的功能:点击上方文字进入相应页面) 时间限制:1 Sec 内存限制:32 MiB提交:49 答案正确:6 提交 状态 讨论区 题目描述 在太平洋的一片海域,发现了大量的油 ...

随机推荐

  1. Io_Language

    Object ancestor := method ( prototype := self proto if (prototype != Obejct, writeln ("Slots of ...

  2. win7 设置自动关机

    1.C:\Windows\System32\shutdown.exe 2. -s:表示关机: -r:表示重启: -t:表示时间,以秒为单位: -a:表示取消shutdown计划,即表示取消关机或重启命 ...

  3. axis2调用webservice

    public static long TIMEOUTINMILLISECONDS=100000; /** * 调用webservice * @param url webserviceURL * @pa ...

  4. ASP.NET 开发人员应该知道的8个网站

    1.CodeProject http://www.codeproject.com/ 2.DotNetNuke 3.4GuysFromRolla 4.DevSource 5.DevX http://ww ...

  5. iOS——GCD多线程

    1> 概述 Grand Central Dispatch (GCD)是Apple开发的一种多核编程技术.主要用于优化应用程序以支持多核处理器以及其他对称多处理系统. GCD提供函数实现多线程开发 ...

  6. oracle Form Builer:ID_NULL Built-in

    Description                                                                     Returns a BOOLEAN va ...

  7. 【腾讯Bugly干货分享】总结一个技术总监的教训和经验

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/Ry-G0Nikh6m-h3ZVC2cLyQ 导语 20 ...

  8. 请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)

    网上找到一种更好的实现方式: (1)把N个数放到容器A(int数组)中. (2)从N个数中随机取出1个数放入容器B(int数组)中. (3)把容器A中最后一个数与随机抽取的数对调 或者 把容器A中最后 ...

  9. 常见的IE6兼容以及css兼容

    IE6虽然随着XP系统退出市场在国外基本基本消失,但是在国内依然占据很大的市场份额.政务网站.页游官网等依然要考虑到IE6用户的体验.如果你的网站使用CSS3等“新技术”时,就必须果断放弃IE6的兼容 ...

  10. Hibernate缓存杂谈

    1.什么是缓存? 缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用程序的运行性能.Hibernate在 ...