hdu6076 Security Check 分类dp 思维
/**
题目:hdu6076 Security Check
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6076
题意:有两个队列在排队,每一次警察可以检查其中一个队的队首的一个人,或者两个队的队首同时检查(两个队首的人满足abs(a[i]-b[j])>k)
每检查一次需要1分钟,求警察检查完所有的人需要的最少时间。
思路:一眼看过去可以定义dp[i][j]表示第一个队列[1,i],第二个队列[1,j]检查完需要的最少时间。但是i,j太大了。
看了官方题解是这样做的,由于k比较小,如果abs(a[i]-b[j])<=k,那么只可以二选一去检查一个人。
这个时候可以dp记忆化,第一维记忆i,第二维记忆a[i]-b[j]+k;来唯一标识该状态。(两个队列都是[1,n]的排列)
如果abs(a[i]-b[j])>k;则两个队队首同时检查最佳。如果检查完该次之后还是满足abs(a[i]-b[j])>k,那么仍然同时检查。
为了加快速度,所以用vector维护一个i和j的一个确定偏移量时候,满足abs(a[i]-b[j])<=k的i位置,这样可以二分下一次出现abs(a[i]-b[j])<=k的i位置,
那么这个i和前面那个i之间的区间就是abs(a[i]-b[j])>k的匹配,可以跳跃到二分后的i。
总时间复杂度为O(n*k*lg(n)) */
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<set>
#include<cstring>
#include<cmath>
using namespace std;
typedef pair<int,int> P;
typedef long long LL;
const int N = 6e4+;
const int mod = ;
const int INF = 0x3f3f3f3f;
int n, k;
int a[N], b[N], pos[N];
int dp[N][];
vector<int> v[N*];
int dfs(int i,int j)
{
if(i==||j==) return i+j;
if(abs(a[i]-b[j])<=k){
int &res = dp[i][a[i]-b[j]+k];
if(~res) return res;
return res = min(dfs(i-,j),dfs(i,j-))+;
}
auto it = upper_bound(v[i-j+n].begin(),v[i-j+n].end(),i);
if(it==v[i-j+n].begin()) return max(i,j);///一直到头都没有abs(a[i]-b[j])<=k的。
it--;
return dfs(*it,j-(i-*it))+i-*it;///[*it + 1, i]这个区间和[j-(i-*it)+1,j]这个区间对应位置满足abs(a[i]-b[j])>k,所以可以快速处理。
}
int main()
{
int T;
cin>>T;
while(T--)
{
scanf("%d%d",&n,&k);
for(int i = ; i <= n; i++) scanf("%d",&a[i]);
for(int i = ; i <= n; i++){
scanf("%d",&b[i]);
pos[b[i]] = i;
}
for(int i = ; i <= *n; i++){
v[i].clear();
}
for(int i = ; i <= n; i++){
for(int j = a[i]-k; j <= a[i]+k; j++){
if(j>=&&j<=n){
v[i-pos[j]+n].push_back(i);
}
}
}
memset(dp, -, sizeof dp);
printf("%d\n",dfs(n,n));
}
return ;
}
hdu6076 Security Check 分类dp 思维的更多相关文章
- HDU 6076 Security Check DP递推优化
Security Check Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
- 2017 多校4 Security Check
2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ...
- HDU 6076 - Security Check | 2017 Multi-University Training Contest 4
/* HDU 6076 - Security Check [ DP,二分 ] | 2017 Multi-University Training Contest 4 题意: 给出两个检票序列 A[N], ...
- 2016多校第4场 HDU 6076 Security Check DP,思维
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6076 题意:现要检查两条队伍,有两种方式,一种是从两条队伍中任选一条检查一个人,第二种是在每条队伍中同 ...
- Windows Directory ACL Security Check By ACL Baseline
catalog . Windows NTFS ACL(MAC) Permission . How the System Uses ACLs . 服务器不安全ACL配置带来的攻击向量 . NTFS AC ...
- cf1153D 树形dp+思维
一千八的题也不会做了呜呜呜 size[u]表示结点u下的叶子结点, 思维:可以想到一个子树对其父亲会有一个消耗值 考虑一个点如果是max,那么其最大值可以是size[u]-p,p是消耗值最小的子树 一 ...
- HDU 4826 (分类DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- E. The Contest ( 简单DP || 思维 + 贪心)
传送门 题意: 有 n 个数 (1 ~ n) 分给了三个人 a, b, c: 其中 a 有 k1 个, b 有 k2 个, c 有 k3 个. 现在问最少需要多少操作,使得 a 中所有数 是 1 ~ ...
- 【树形dp 思维题】HHHOJ#483. NOIP司马懿
要注意利用一些题目的特殊条件吧. 题目大意 有一颗$n$个点带点权$a_i$的树,$q$次询问树上是否存在长度为$l$的路径. $n,q,l\le 10^5,0 \le a_i \le 2$ 题目分析 ...
随机推荐
- JDBC纯驱动方式连接MySQL
1 新建一个名为MysqlDemo的JavaProject 2 从http://dev.mysql.com/downloads/connector/j/中下载最新的驱动包. 这里有.tar.gz和.z ...
- 【日志处理】logstash性能优化配置
2W条数据用时4秒完成,每秒5000条左右,昨天是同时写入到文件和标准输出,看起来是output的问题,这块性能应当可以满足性能要求了 后继我会继续把结果输出到tcp,kafka来测试经过grok后的 ...
- JOptionPane的经常使用4种对话框
JOptionPane类有4个用于显示对话框的静态方法: 消息.选项.确认,输入对话框 showMessageDialog://显示一条消息并等待用户OK showConfirmDialog://显示 ...
- CentOS7 Failed to start LSB: Bring up/down networking. 已解决!!!
服务器更换了主板之前配置的静态IP发现启动网卡出现异常. 执行 service network restart 出现以下错误 Restarting network (via systemctl): ...
- dhclient 简介
dhclient 就和它名字一样,用来通过 dhcp 协议配置本机的网络接口. 使用方法就是 #dhclient ifN # ifN 就是 ifconfig 中输出的接口名称,etc. eth0,wl ...
- 【菜鸟也疯狂UML系列】——浅析UML四种关系
在UML中.关系是很重要的.它抽象出对象之间的联系,让对象构成某个联系起来的结构.以下将简要分析一下UML中的四种关系:关联.依赖,泛化,实现. 一.举例罗列 1.关联(Association) 关联 ...
- unicode 编码在线转换工具
字符串 unideo的16进制值
- FEC
什么是FEC http://zhidao.baidu.com/link?url=sbk7ue4n75HCbumrznBlAwdZAII8ZK2Xp3HTJ5BRkLJtDLFN3MGp9KOlrHVp ...
- ORA-12519, TNS:no appropriate service handler found(数据库上当前的连接数目已经超过最大值)
报错: ORA-12519, TNS:no appropriate service handler foundThe Connection descriptor used by the client ...
- Java学习笔记1、常用dos命令
cd 改变当前目录 sys 制作DOS系统盘 copy 拷贝文件 del 删除文件 deltree 删除目录树 dir 列文件名 diskcopy 制磁盘 edit 文本编辑 format ...