Gym - 102307C Common Subsequence 搞不懂的dp
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的更多相关文章
- Common Subsequence Gym - 102307C 公共序列
2019 ICPC Universidad Nacional de Colombia Programming Contest C D J C. Common Subsequence 题意:给出长度 ...
- Common Subsequence(dp)
Common Subsequence Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 951 Solved: 374 Description A subs ...
- HDU 1159 Common Subsequence【dp+最长公共子序列】
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- (线性dp,LCS) POJ 1458 Common Subsequence
Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65333 Accepted: 27 ...
- UVA 10405 Longest Common Subsequence (dp + LCS)
Problem C: Longest Common Subsequence Sequence 1: Sequence 2: Given two sequences of characters, pri ...
- HDU 1159 Common Subsequence (dp)
题目链接 Problem Description A subsequence of a given sequence is the given sequence with some elements ...
- hdu 1159 Common Subsequence(最长公共子序列 DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
- HDOJ 1159 Common Subsequence【DP】
HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- POJ1458 Common Subsequence —— DP 最长公共子序列(LCS)
题目链接:http://poj.org/problem?id=1458 Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Tot ...
随机推荐
- 如何知道外围器件的器件地址PHY_ADDR
由于 S5P6818 现有的uboot没有网卡的初始化代码实现,在尝试移植网卡驱动而跟踪有关的源码的时候,不止一次地看到了类似下面的需要修改器件地址的有关写法. 根据原理图的有关硬件连接,找到对应的元 ...
- (java实现)双向循环链表
什么是双向循环链表 在了解双向循环链表之前,如果对链表还没有一个清晰的概念,建议你看看单链表和单向循环链表,这有利于你更好的理解下面的内容.(废话有点多[逃] 相比单链表,双向循环链表是一个更加复杂的 ...
- java集合的作用
从架构的方面来理解,可能稍微容易一点.在编程中,需要管理很多对象集.比如某班全部同学,某个公司所有人员资料等.要管理这些资料,java必须提供某种数据结构支持.由于时间,空间,安全的考虑,有各种不同的 ...
- 数据结构与算法(周测2-AVL树)
判断题 1.The inorder traversal sequence of an AVL tree must be in sorted (non-decreasing) order. T ...
- Django 配置JWT验证
1.setting.py配置 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentica ...
- Python内置函数系列
Python内置(built-in)函数随着python解释器的运行而创建.在Python的程序中,你可以随时调用这些函数,不需要定义. 作用域相关(2) locals() :以字典类型返回当前位置 ...
- iOS - 解决警告“ld: Warning: Directory Not Found for Option”
有时候我们可能从项目中删除了某个目录.文件以后,编译出现警告信息: ld: warning: directory not found for option“XXXXXX” 具体类似下图: 很奇怪,为什 ...
- zlog日志函数库
在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C++的log4cxx).C程序员都喜欢用自己的轮子.printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者输出文件 ...
- c#模拟鼠标左键单击
[System.Runtime.InteropServices.DllImport("user32.dll")] private static extern int mouse_e ...
- 前端(HTML)+后端(Django)+数据库(MySQL):用户注册及登录演示
1.创建一个html文件用于简单的网页注册demo <!DOCTYPE html> <html lang="en"> <head> <me ...