2016多校第4场 HDU 6076 Security Check DP,思维
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6076
题意:现要检查两条队伍,有两种方式,一种是从两条队伍中任选一条检查一个人,第二种是在每条队伍中同时各检查一个,前提是两条队伍中的两个人的序号大于k。然后询问检查最少需要的时间。
解法:根据题意很容易想到dp[i][j]表示第一个队伍已经检查完前i个人,第二个人已经检查完前j个人所需最小时间。但是这样是O(n^2)毫无疑问会tle。我们发现k很小,所以我们可以对于两种转移方式分开处理。对于差值小于等于k的人可以普通的转移。对于差值大于k的我们可以先预处理出来每个偏移量(第一队列中选的人的位置和第二个队列中选的人的位置的差值)差值小于等于k的点对,然后通过二分找到左边最近的一个差值小于k的点,那么中间按照这个偏移量一对一对的检查,差值一定是大于k的。所以总复杂度O(n * k * log N)。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 60010;
int n, k, a[maxn], b[maxn], pos[maxn];
bool cmp(int x, int y){return x>y;}
vector <int> v[maxn*2];
int dp[maxn][22];
int dfs(int x, int y){
if(!x||!y) return x+y;
if(abs(a[x]-b[y])<=k){
int &g=dp[x][a[x]-b[y]+k];
if(g) return g;
return g = min(dfs(x-1,y),dfs(x,y-1))+1;
}
auto it = lower_bound(v[x-y+n].begin(),v[x-y+n].end(),x,cmp);
if(it == v[x-y+n].end()) return max(x, y);
int t = *it;
return dfs(t, y-x+t)+x-t;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d %d", &n,&k);
for(int i=0; i<=2*n; i++) v[i].clear();
memset(dp, 0, sizeof(dp));
for(int i=1; i<=n; i++){
scanf("%d", &a[i]);
}
for(int i=1; i<=n; i++){
scanf("%d", &b[i]);
pos[b[i]] = i;
}
for(int i=n; i>=1; i--){
for(int j=a[i]-k; j<=a[i]+k; j++){
v[i-pos[j]+n].push_back(i); }
}
int ans = dfs(n, n);
printf("%d\n", ans);
}
return 0;
}
2016多校第4场 HDU 6076 Security Check DP,思维的更多相关文章
- HDU 6076 Security Check DP递推优化
Security Check Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
- HDU 6076 - Security Check | 2017 Multi-University Training Contest 4
/* HDU 6076 - Security Check [ DP,二分 ] | 2017 Multi-University Training Contest 4 题意: 给出两个检票序列 A[N], ...
- 2017多校第9场 HDU 6170 Two strings DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6170 题意:给了2个字符串,其中第2个字符串包含.和*两种特别字符,问第二个字符串能否和第一个匹配. ...
- 2017多校第9场 HDU 6161 Big binary tree 思维,类似字典树
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6161 题意: 题目是给一棵完全二叉树,从上到下从左到右给每个节点标号,每个点有权值,初始权值为其标号, ...
- 2017多校第4场 HDU 6078 Wavel Sequence DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6078 题意:求两个序列的公共波形子序列的个数. 解法: 类似于最长公共上升子序列,对于每个i,只考虑存 ...
- hdu 6076 Security Check
题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6076 2017 Multi-University Training Contest - Team 4 ...
- 2016多校第六场题解(hdu5793&hdu5794&hdu5795&hdu5800&hdu5802)
这场就做出一道题,怎么会有窝这么辣鸡的人呢? 1001 A Boring Question(hdu 5793) 很复杂的公式,打表找的规律,最后是m^0+m^1+...+m^n,题解直接是(m^(n+ ...
- 2017多校第9场 HDU 6169 Senior PanⅡ 数论,DP,爆搜
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6169 题意:给了区间L,R,求[L,R]区间所有满足其最小质数因子为k的数的和. 解法: 我看了这篇b ...
- 2017多校第10场 HDU 6181 Two Paths 次短路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6181 题意:给一个图,求出次短路. 解法:我之前的模板不能解决这种图,就是最短路和次短路相等的情况,证 ...
随机推荐
- 楼房 洛谷1382 && codevs2995
P1382 楼房 题目描述 地平线(x轴)上有n个矩(lou)形(fang),用三个整数h[i],l[i],r[i]来表示第i个矩形:矩形左下角为(l[i],0),右上角为(r[i],h[i]).地平 ...
- Socket_SSH-1
服务器端: import socket,os server=socket.socket() server.bind(('localhost',9999)) server.listen() while ...
- [AHOI2014/JSOI2014]支线剧情 有上下界费用流
---题面--- 题解: 第一眼费用流,,然后想了好久怎么建图,,,最后发现是最小费用可行流的板子题.... 其实还没有很懂这个算法,所以这里只是摆一下步骤,以后再补理解吧. 首先一个思路就是转换图, ...
- BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
+++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...
- props设置state误区
class Component extends React.Component { constructor(props) { super(props); this.state = { value: t ...
- Codeforces Round #340 (Div. 2) A
A. Elephant time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- STM32 - 软件设置单片机重启
__set_FAULTMASK();//关闭总中断 NVIC_SystemReset();//请求单片机重启 执行NVIC_SystemReset()函数不允许被打断,所以关总中断
- JAVA、android中常用的一些jar包的作用
正文: 这里主要介绍的是hibernate使用到的.jar Hibernate一共包括了23个jar包,令人眼花缭乱.本文将详细讲解Hibernate每个jar包的作用,便于你在应用中根据自己的需要进 ...
- 【转】Pyhton 单行、多行注释符号使用方法及规范
转自:Pyhton 单行.多行注释符号使用方法及规范 python中的注释有多种,有单行注释,多行注释,批量注释,中文注释也是常用的.python注释也有自己的规范,在文章中会介绍到.注释可以起到一个 ...
- [LeetCode] Binary Tree Level Order Traversal 与 Binary Tree Zigzag Level Order Traversal,两种按层次遍历树的方式,分别两个队列,两个栈实现
Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of its nodes ...