Gym - 102307C Common Subsequence

题意:给你两个相同长度的DNA序列,判断这两个的最长公共子序列长度是不是0.99*n,n为序列的长度(n<=1e5)。

嗯,正常dp的想法是n2,肯定是会超时的,那么我们把目光放到0.99*n这里,反过来不就是最多只能失配0.01*n,最大也就是1000个字符。

所以接下来就是不看大佬做法,自己完全没想到的dp设法。dp[i][j]就代表s1串抛弃了i个字符,s2抛弃了j个字符的最长公共子序列长度。

那么此时,s1串已经匹配了的序列长度就是i+dp[i][j],s2已经匹配的序列长度就是j+dp[i][j]。

然后当s1的第i+dp[i][j]+1个字符跟s2的第j+dp[i][j]+1个字符匹配时,如果匹配成功,明显dp[i][j]++

而如果此时失配了,那么就是s1串抛弃第i+dp[i][j]+1个字符或者s2抛弃第j+dp[i][j]+1个字符,那么此时就是用dp[i][j]来更新它们。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e3+,M=1e5+;
char s1[M],s2[M];
int dp[N][N];
int main(){
int n,m,ans;
while(~scanf("%s%s",s1+,s2+)){
ans=;
n=strlen(s1+);
m=n/+n%;
for(int i=;i<=m;i++)
for(int j=;j<=m;j++) dp[i][j]=;
for(int i=;i<=m;i++){
for(int j=;j<=m;j++){
while(i+dp[i][j]+<=n&&i+dp[i][j]+<=n){
if(s1[i+dp[i][j]+]==s2[j+dp[i][j]+]) dp[i][j]++;
else break;
}
dp[i+][j]=max(dp[i+][j],dp[i][j]);
dp[i][j+]=max(dp[i][j+],dp[i][j]);
ans=max(ans,dp[i][j]);
}
}
if(ans*>=*n) printf("Long lost brothers D:\n");
else printf("Not brothers :(\n");
}
return ;
}

神奇的思路

Gym - 102307C Common Subsequence 搞不懂的dp的更多相关文章

  1. Common Subsequence Gym - 102307C 公共序列

    2019 ICPC Universidad Nacional de Colombia Programming Contest C D J   C. Common Subsequence 题意:给出长度 ...

  2. Common Subsequence(dp)

    Common Subsequence Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 951  Solved: 374 Description A subs ...

  3. HDU 1159 Common Subsequence【dp+最长公共子序列】

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. (线性dp,LCS) POJ 1458 Common Subsequence

    Common Subsequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65333   Accepted: 27 ...

  5. UVA 10405 Longest Common Subsequence (dp + LCS)

    Problem C: Longest Common Subsequence Sequence 1: Sequence 2: Given two sequences of characters, pri ...

  6. HDU 1159 Common Subsequence (dp)

    题目链接 Problem Description A subsequence of a given sequence is the given sequence with some elements ...

  7. hdu 1159 Common Subsequence(最长公共子序列 DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...

  8. HDOJ 1159 Common Subsequence【DP】

    HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  9. POJ1458 Common Subsequence —— DP 最长公共子序列(LCS)

    题目链接:http://poj.org/problem?id=1458 Common Subsequence Time Limit: 1000MS   Memory Limit: 10000K Tot ...

随机推荐

  1. Python3 和 Python2的区别

    目录 print Python2.7的print不是一个function Python3里的print是一个function. Unicode Python 2 有 ASCII str() 类型,un ...

  2. scratch少儿编程第一季——08、特效我也会

    各位小伙伴大家好: 上期我们学习了外观模块的角色切换,今天我们继续学习外观模块的其他指令. 首先来看特效指令. 这里我们克隆了三只小猫作对比,将颜色特效增加25. 这个指令除了颜色特效还有很多其他的特 ...

  3. (六)mybatis之多对一关系(简单)

    一.需求分析 需求:   查询所有订单信息及订单下的订单明细信息 分析:      一条订单只能由一个消费者下单,但是一条订单有多条订单明细. 二.创建数据库表和实体对象 Customer.java ...

  4. Unable to resolve service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor'

    An unhandled exception occurred while processing the request. InvalidOperationException: Unable to r ...

  5. TypeScript入门七:TypeScript的枚举

    关于枚举 数字枚举 字符串枚举 异构枚举 计算的和常量成员 运行时的枚举与反向映射 常量枚举与外部枚举 一.关于枚举 枚举:一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计 ...

  6. java如何在不访问数据库就可以对list分页?

    废话不多说,直接上代码 import java.util.ArrayList; import java.util.List; public class demo { public static voi ...

  7. 认识:before和:after伪类

    有时候,我们需要大量的重复代码去实现一个非常简单的功能,这不仅浪费时间,而且效率低下,例如: <div class="aa">你好</div><div ...

  8. vim调试Shell脚本: unexpected EOF while looking for matching

    往往在编写脚本完后测试,出现错误需要调试,vim 是一种强大的文本编辑器,对调试也很有帮助.如果指定用不同的颜色显示某些错误,通过配置 .vimrc 文件就会替您完成大部分调试工作. 小柏在测试脚本时 ...

  9. 异常-Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: <EOF> after :

    1 详细异常 Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at ...

  10. 利用setuptools发布Python程序到PyPI,为Python添砖加瓦

    pip install的东西从哪里来的? 从PyPI (Python Package Index)来的,官网是:  https://pypi.python.org/pypi/执行pip install ...