首页 > 其他分享 >P4303 [AHOI2006]基因匹配

P4303 [AHOI2006]基因匹配

时间:2022-10-05 22:34:08浏览次数:87  
标签:匹配 AHOI2006 int res 最大值 P4303 num return 转移

初始方程为:

\[f_{i,j}= \max (f_{i-1,j-1}+1,f_{i-1,j},f_{i,j-1}) \]

对于每一个 \(i\) 来说,只有五次由 \(f_{i-1,j-1}\) 来转移(组成DNA序列的每一种碱基在该序列中正好出现5次) 。

其他的可以是由上方的数字(拷贝)或左边的所有数字的最大值( \(1--n\) 的最值)来转移。

考虑去除 \(j\) 的一维,

对于不需要由 \(f_{i-1,j-1}\) 来转移的 \(f[j]\) ,不变(因为改变会增加时间复杂度,就退化为初始的方程了)。

我们用树状数组来维护最大值 \(O(\log n)\) ,并逆序转移(类似于背包问题)。

因为最大值可以通过向下和向右转移来到 \(f_{i-1,j-1}\) 来转移 \(f_{i,j}\) 。

其他大佬的解释(蒟蒻溴化氢

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int n,ans;
int c[N],a[N];
int b[N],num[N][6];
int f[N];
int tot[N];
int lowbit(int x){
	return x&(-x);
}
int query(int x){
	int res=0;
	for(; x; x-=lowbit(x))res=max(res,c[x]);
	return res;
}
void update(int x,int y)
{
	for(; x<=n; x+=lowbit(x))c[x]=max(c[x],y);
	return;
}
int main()
{
	cin>>n;n*=5;
	for(int i=1; i<=n; i++)
	{
		cin>>a[i];
	}
	for(int i=1; i<=n; i++)
	{
		cin>>b[i];
		num[b[i]][++tot[b[i]]]=i;
	}
	for(int i=1; i<=n; i++)
	{
		for(int j=5; j>=1; j--)
		{
			static int x;
			x=num[a[i]][j];
			f[x]=query(x-1)+1;
			update(x,f[x]);
		}
	}
	for(int i=1; i<=n; i++)ans=max(ans,f[i]);
	cout<<ans<<endl;
}

标签:匹配,AHOI2006,int,res,最大值,P4303,num,return,转移
From: https://www.cnblogs.com/dadidididi/p/16756618.html

相关文章

  • 特征提取与匹配算法的前世与今生专题1
    1、资源搜集​​【计算机视觉】2.特征点检测:Harris,SIFT,SURF,ORB​​​​传统计算机视觉中图像特征匹配方法的原理介绍(SIFT和ORB)​​​​模式识别之特征提取算法​​......
  • 正则表达式 匹配详细地址
    最近在做从细详地址中获取到需要的信息,首选考虑的是正则,但是详细地址种类太多,我只要“市、区(县)、街镇乡”三个行政级别的信息,且在中间行政级别名称缺失的情况下,可以获......
  • python系列教程196——参数匹配
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于......
  • 字符串匹配之Sunday算法
    简介Sunday算法是一种字符串匹配算法,相比于KMP算法,它比较简单易学。在有些时候,比如字符串很长的时候,它是比KMP要高效的。核心思想从前往后匹配,匹配失败时关注主串中......
  • Spring 高级 切点匹配
    一、execution和annotation两种方式设置切点匹配packagecom.mangoubiubiu.show.a16;importorg.springframework.aop.aspectj.AspectJExpressionPointcut;import......
  • 匹配与覆盖
    匹配数:端点两两不同的边子集最大值定义二:任意一条边都与其对应点子集有重合性质1:最大匹配=无可增广轨道,必要性易证G中关于M的可增广轨道定义:v0e1v1e2v2...e(2k+1)v(2k+......
  • 中文匹配
    中文匹配看到希希在做的一道很有意思的题目,顺手作为SEIndividualProject来训练一下。题目给定一个网页,https://www.douban.com/note/170389265/,把这个网页的内容复......
  • 查找字符串三种方法(截取子串,朴素匹配法,KMP匹配)——C语言描述
    查找字符串三种方法(截取子串,朴素匹配法,KMP匹配)——C语言描述目录查找字符串三种方法(截取子串,朴素匹配法,KMP匹配)——C语言描述0测试用例框架1查找字符串——截取字串方法......
  • 字符串匹配基础(上):如何借助哈希算法实现高效字符串匹配?
    链接:https://time.geekbang.org/column/article/71187目录字符串匹配算法BF算法RK算法字符串匹配算法BF算法、RK算法、BM算法、KMP算法BF算法和RK算法:单模......
  • 洛谷P3375 kmp字符串匹配
    #include<bits/stdc++.h>#defineintlonglongusingnamespacestd;inti,j,k,la,lb,kmp[1000005];chara[1000005],b[1000005];signedmain(){  scanf("%s%s",......