链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1264

思路: n大小为20000*5,而一般的dp求最长公共子序列复杂度是 n*n的,所以我们必须优化。

题目说了一个数会出现5次,那么我们可以预处理得到 第一个序列a[]每个数字分别在哪些位置,

因为求LCS的状态转移方程中当 s1[i-1] == s2[j-1]时,dp[i][j] = dp[i-1][j-1] + 1;只有当两个点相同时

值才会+1,我们可以对第二个序列b[]遍历一遍,对于b[i]我们可以找到它在a[]上的5个位置,这5个

位置的dp[pos]都可以被更新,状态转移方程为: dp[pos] = max(p[1] - p[pos-1]) + 1, 对于dp[1] - dp[pos],

这段区间的最大值,我们直接用树状数组维护就好了,时间复杂度为 O(n*logn)

实现代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long longconst int M = 2e5+10;
int a[M][7],c[M],dp[M],n;void update(int x,int p){while(x <= n*5){c[x] = max(c[x],p);x += (x&-x);}
}int getsum(int x){int ans = 0;while(x){ans = max(ans,c[x]);x -= (x&-x);}return ans;
}int main()
{int x;cin>>n;for(int i = 1;i <= n*5;i ++){cin>>x;a[x][++a[x][0]] = i;}for(int i = 1;i <= n*5;i ++){cin>>x;for(int j = 5;j >= 1;j --){int num = getsum(a[x][j]-1)+1;if(num > dp[a[x][j]]) dp[a[x][j]] = num,update(a[x][j],num);}}int ans = 0;for(int i = 1;i <= n*5;i ++){ans = max(dp[i],ans);}cout<<ans<<endl;return 0;
}

转载于:https://www.cnblogs.com/kls123/p/10567388.html

bzoj 1264: [AHOI2006]基因匹配Match (树状数组优化dp)相关推荐

  1. bzoj 1264: [AHOI2006]基因匹配Match(树状数组)

    1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1211  Solved: 798 [Submit ...

  2. 1264: [AHOI2006]基因匹配Match

    1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 982  Solved: 635 [Submit] ...

  3. E. Pencils and Boxes (树状数组优化dp)

    传送门 1.题意 给出n个数,要求给这些数分组,每组不少于k个. 每组的数之间的差不能大于d.是否能够分组? 2.dp分析 先排序. f[i]f[i]f[i]表示[1~i]能够分组成功. 答案就是f[ ...

  4. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  5. [SCOI2014]方伯伯的玉米田 //二维树状数组优化DP

    题目: 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩 ...

  6. hdu 4991(树状数组优化dp)

    Ordered Subsequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. hdu 5542(树状数组优化dp)

    题意: 求n个数中长度为m的上升子序列的个数 解题思路:dp[i][j]表示第i个数长度为j的上升序列的个数.dp[i][j] = sum{dp[k][j-1] | a[k] < a[i]},这 ...

  8. CF1621G Weighted Increasing Subsequences(离散化+树状数组优化dp+栈维护后缀最大值+计数)

    problem luogu-link solution 显然单独考虑每个 iii 的贡献,即被多少个合法上升子序列包含. 令 x=max⁡{j∣j>i∧aj>ai}x=\max\{j\ | ...

  9. 【HDU - 6447】YJJ's Salesman(降维dp,树状数组优化dp)

    题干: YJJ is a salesman who has traveled through western country. YJJ is always on journey. Either is ...

最新文章

  1. 从0到1:CTFer成长之路
  2. D1net阅闻:思科占全球交换路由器53%市场份额
  3. UC伯克利发现「没有免费午餐定理」加强版:每个神经网络,都是一个高维向量...
  4. FaceL:一个靠谱的开源人脸标注训练识别程序
  5. Vector用法(C++ Primer中文版)
  6. iview table 自定义列_案例 | iview中Table:拖拽适配列、自定义固定列、合并行
  7. Android支持横行滚动的ListView控件
  8. 作为医生,除了买花,还能在情人节用什么特别的方式表白呢?(情书-病历体)...
  9. gin框架长连接_一个TCP长连接设备管理后台工程(一)
  10. java怎么输入数据_java怎么键盘输入数据啊?
  11. 数据结构--单链表single linked list数据结构C++实现
  12. 微信小程序自定义组件4 —— 代码共享behaviors
  13. 华为机试HJ45:名字的漂亮度
  14. layer关闭当前窗口并刷新父窗口
  15. [Java]HashMap的两种排序方式
  16. linkin大话设计模式--抽象工厂
  17. vb 运行错误429 mysql_win7系统运行VB工具提示“运行时错误429 ActiveX部件不能创建对象”的解决方法...
  18. USB数据线串联电阻知识总结
  19. Java 处理英文文本标点符号去除
  20. DeepCTR-Torch 如何使用【案例(Criteo、Movielens)演示、特征(SparseFeat、DenseFeat、VarLenSparseFeat)参数含义】

热门文章

  1. sql 基础--mysql 5 (6)
  2. 读书笔记2013第13本:《怎样解题》
  3. mysql 日期_「5」学习MySQL日期与时间类型发现:要养成注重细节的习惯
  4. java script 6 折线_Java入门第六篇:Java script(js)的事件
  5. mysql5.7.20安装红黑_Window环境安装MySQLServer5.7.21
  6. foxmail 怎么修改存储路径_FoxMail 7.2的邮件存储目录修改
  7. php mysql 防 sql注入_php 防sql注入方法
  8. you need python_Life is short,you need Python——Python序列(列表)
  9. BF算法优化-------KMP算法
  10. 相机标定:(1)相机模型