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$ 题目分析 ...
随机推荐
- scrapy-splash抓取动态数据例子六
一.介绍 本例子用scrapy-splash抓取中广互联网站给定关键字抓取咨询信息. 给定关键字:打通:融合:电视 抓取信息内如下: 1.资讯标题 2.资讯链接 3.资讯时间 4.资讯来源 二.网站信 ...
- MAVEN 配置阿里巴巴镜像
配置 修改maven根目录下的conf文件夹中的setting.xml文件,内容如下: <mirrors> <mirror> <id>alimaven</id ...
- [Functional Programming Monad] Refactor Stateful Code To Use A State Monad
When we start to accumulate functions that all work on a given datatype, we end up creating a bunch ...
- ASUS主板ALC887声卡,RTL81XX网卡,黑苹果驱动安装
折腾了一下午终于在黑苹果上成功的安装了网卡,声卡驱动: 我的配置: 主板 ASUS b75m-a 声卡 ALC887 网卡 RTL8168F 安装所需工具: MutiBest 下载OS对应的版本即可 ...
- cookie、localStorage和sessionStorage区别
三者区别见下表: 说明: cookie的处理过程为: 服务器向客户端发送cookie 浏览器将cookie保存 之后每次http请求浏览器都会将cookie发送给服务器端 对于 cookie,我们还需 ...
- [XCode A] - 编程相关问题
1.如何在XCode中新建文件夹 如果在xcode工程中new group,只是在视觉效果上分好了几个文件夹,方便分类管理,但在finder中并不会创建新的文件夹,在硬盘目录还是所有文件都并列在一个文 ...
- springmvc 数据回显功能
按下 修改数据之后 修改功能实现-转向修改页面 2)控制层实现准备数据,并转向修改页面 ~ PersonController.java package cn.itcast.springmvc.cont ...
- 已知的问题:本文总结了与Telerik UI for ASP.NET Core相关的所有已知问题。
ASP.NET Core Framework 不支持数据表. 有关此限制的更多信息,请参阅dotnet / corefx#1039. 不支持本地化资源. 有关此限制的更多信息,请参阅dotnet / ...
- VPS性能测试
1 cpu硬件参数 cat /proc/cpuinfo 我们可以看到CPU的型号.物理CPU个数(显示0)表示只有1个只有1个物理处理器.CPU核心数(cpu cores)等参数,至少我们需要比较商家 ...
- Eclipse+maven开发环境搭建
版本描述: Eclipse 3.2.2 Maven 2.0.7 Jdk 1.5以上,本例是在jdk1.50版本测试通过 Maven配置过程 Maven官方下载地址:http://www.apache. ...