bzoj 1264: [AHOI2006]基因匹配Match (树状数组优化dp)
链接: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)相关推荐
- bzoj 1264: [AHOI2006]基因匹配Match(树状数组)
1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1211 Solved: 798 [Submit ...
- 1264: [AHOI2006]基因匹配Match
1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec Memory Limit: 162 MB Submit: 982 Solved: 635 [Submit] ...
- E. Pencils and Boxes (树状数组优化dp)
传送门 1.题意 给出n个数,要求给这些数分组,每组不少于k个. 每组的数之间的差不能大于d.是否能够分组? 2.dp分析 先排序. f[i]f[i]f[i]表示[1~i]能够分组成功. 答案就是f[ ...
- Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...
- [SCOI2014]方伯伯的玉米田 //二维树状数组优化DP
题目: 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩 ...
- hdu 4991(树状数组优化dp)
Ordered Subsequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 5542(树状数组优化dp)
题意: 求n个数中长度为m的上升子序列的个数 解题思路:dp[i][j]表示第i个数长度为j的上升序列的个数.dp[i][j] = sum{dp[k][j-1] | a[k] < a[i]},这 ...
- CF1621G Weighted Increasing Subsequences(离散化+树状数组优化dp+栈维护后缀最大值+计数)
problem luogu-link solution 显然单独考虑每个 iii 的贡献,即被多少个合法上升子序列包含. 令 x=max{j∣j>i∧aj>ai}x=\max\{j\ | ...
- 【HDU - 6447】YJJ's Salesman(降维dp,树状数组优化dp)
题干: YJJ is a salesman who has traveled through western country. YJJ is always on journey. Either is ...
最新文章
- 从0到1:CTFer成长之路
- D1net阅闻:思科占全球交换路由器53%市场份额
- UC伯克利发现「没有免费午餐定理」加强版:每个神经网络,都是一个高维向量...
- FaceL:一个靠谱的开源人脸标注训练识别程序
- Vector用法(C++ Primer中文版)
- iview table 自定义列_案例 | iview中Table:拖拽适配列、自定义固定列、合并行
- Android支持横行滚动的ListView控件
- 作为医生,除了买花,还能在情人节用什么特别的方式表白呢?(情书-病历体)...
- gin框架长连接_一个TCP长连接设备管理后台工程(一)
- java怎么输入数据_java怎么键盘输入数据啊?
- 数据结构--单链表single linked list数据结构C++实现
- 微信小程序自定义组件4 —— 代码共享behaviors
- 华为机试HJ45:名字的漂亮度
- layer关闭当前窗口并刷新父窗口
- [Java]HashMap的两种排序方式
- linkin大话设计模式--抽象工厂
- vb 运行错误429 mysql_win7系统运行VB工具提示“运行时错误429 ActiveX部件不能创建对象”的解决方法...
- USB数据线串联电阻知识总结
- Java 处理英文文本标点符号去除
- DeepCTR-Torch 如何使用【案例(Criteo、Movielens)演示、特征(SparseFeat、DenseFeat、VarLenSparseFeat)参数含义】
热门文章
- sql 基础--mysql 5 (6)
- 读书笔记2013第13本:《怎样解题》
- mysql 日期_「5」学习MySQL日期与时间类型发现:要养成注重细节的习惯
- java script 6 折线_Java入门第六篇:Java script(js)的事件
- mysql5.7.20安装红黑_Window环境安装MySQLServer5.7.21
- foxmail 怎么修改存储路径_FoxMail 7.2的邮件存储目录修改
- php mysql 防 sql注入_php 防sql注入方法
- you need python_Life is short,you need Python——Python序列(列表)
- BF算法优化-------KMP算法
- 相机标定:(1)相机模型