HDU 6076 - Security Check | 2017 Multi-University Training Contest 4
/*
HDU 6076 - Security Check [ DP,二分 ] | 2017 Multi-University Training Contest 4
题意:
给出两个检票序列 A[N], B[N]
规定 abs(A[i]-B[j]) <= k 的i,j不能同时检票
求最少的检票时间
限制 N<= 6e4, k <= 10
分析:
f(i,j) 为检票至i,j的时间
则 f(i,j) = f(i-1,j-1) + 1 , abs(A[i]-B[j]) > k
= min(f(i-1,j), f(i,j-1)) + 1 , abs(A[i]-B[j]) <= k
对于第二项,由于k小,可DP
对于第一项,可以二分最大的 t 使得 f(i,j) = f(i-t,j-t) + t 成立
那么 f(i-t,j-t) 就是第二项的了
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 60005;
vector<int> G[N<<1];
int dp[N][25];
int a[N], b[N], pos[N];
int t, n, k;
int f(int n, int m)
{
if (n == 0 || m == 0) return n+m;
if (abs(a[n]-b[m]) > k)
{
int t = lower_bound(G[m-n+N].begin(), G[m-n+N].end(), n) - G[m-n+N].begin();
if (t == 0) return max(n, m);
t = G[m-n+N][t-1];
return f(t, m-n+t) + n-t;
}
else
{
int t = b[m]-a[n]+k;
if (dp[m][t] == -1)
dp[m][t] = min(f(n-1, m), f(n, m-1)) + 1;
return dp[m][t];
}
}
int main()
{
scanf("%d", &t);
while (t--)
{
for (int i = 0; i < N<<1; i++) G[i].clear();
memset(dp, -1, sizeof(dp));
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
pos[a[i]] = i;
}
for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
for (int i = 1; i <= n; i++)
for (int j = max(1, b[i]-k); j <= min(n, b[i]+k); j++)
{
G[i-pos[j]+N].push_back(pos[j]);
}
for (int i = 0; i < N<<1; i++) sort(G[i].begin(), G[i].end());
int ans = f(n, n);
printf("%d\n", ans);
}
}
HDU 6076 - Security Check | 2017 Multi-University Training Contest 4的更多相关文章
- hdu 6076 Security Check
题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6076 2017 Multi-University Training Contest - Team 4 ...
- HDU 6076 Security Check DP递推优化
Security Check Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
- 2016多校第4场 HDU 6076 Security Check DP,思维
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6076 题意:现要检查两条队伍,有两种方式,一种是从两条队伍中任选一条检查一个人,第二种是在每条队伍中同 ...
- HDU 6170 - Two strings | 2017 ZJUT Multi-University Training 9
/* HDU 6170 - Two strings [ DP ] | 2017 ZJUT Multi-University Training 9 题意: 定义*可以匹配任意长度,.可以匹配任意字符,问 ...
- hdu 6301 Distinct Values (2018 Multi-University Training Contest 1 1004)
Distinct Values Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)
OO's Sequence Time Limit: 4000/2000 MS (Jav ...
- hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)
CRB and Tree Time Limit: 8000/4000 MS (J ...
- HDU 4944 FSF’s game(2014 Multi-University Training Contest 7)
思路: ans[n]= ans[n-1] + { (n,1),(n,2).....(n,n)} 现在任务 是 计算 { (n,1),(n,2).....(n,n)}(k=n的任意因子) 很明显 ...
- HDU 4940 Destroy Transportation system(2014 Multi-University Training Contest 7)
思路:无源汇有上下界可行流判定, 原来每条边转化成 下界为D 上界为 D+B ,判断是否存在可行流即可. 为什么呢? 如果存在可行流 那么说明对于任意的 S 集合流出的肯定等于 流入的, ...
随机推荐
- mysql导入数据报错:Incorrect datetime value
incorrect datetime value 报错信息如下图: 意思很明显是说,'0000-00-00 00:00:00'不是一个有效的日期类型的值 解决办法: sql_mode 中删除 NO_Z ...
- notepad++一次多行复制粘贴到对应位置
NodePad++一次复制多行粘贴到对应位置 有时候要写sql,但是里面有很多字段要对应上,如果要自己一个字段一个字段的去写是在有点麻烦,是不是有更好的方法做到这件事呢? 要做这件事,首先分析下我们已 ...
- Python 解leetcode:48. Rotate Image
题目描述:把一个二维数组顺时针旋转90度: 思路: 对于数组每一圈进行旋转,使用m控制圈数: 每一圈的四个元素顺时针替换,可以直接使用Python的解包,使用k控制每一圈的具体元素: class So ...
- Centos7下永久修改mysql5.6最大连接数
由于解除系统限制,设置最大连接数时,量力而行.https://blog.csdn.net/five3/article/details/79671317
- 使用haystack实现django全文检索搜索引擎功能
前言 django是python语言的一个web框架,功能强大.配合一些插件可为web网站很方便地添加搜索功能. 搜索引擎使用whoosh,是一个纯python实现的全文搜索引擎,小巧简单. 中文搜索 ...
- docker 入门6 - 部署 【翻译】
开始,第 6 部分:部署应用 先决条件 安装 Docker. 获取第 3 部分先决条件中所述的 Docker Compose. 获取 Docker Machine,如第 4 部分先决条件中所述. 阅读 ...
- golang代码中生成pprof和trace报告
// 生成 CPU 报告 import ( "context" "runtime/pprof" "log" ) func cpuProfil ...
- nexus 绑定负载均衡nginx反向代理后 遇到的https问题。
1.今天搭建maven私服,下载安装好nexus运行后,通过IP可以直接访问,没有问题,如:http://123.123.123.123:8081 就可以进入主页面.没有任何问题. 2.但是他默认是h ...
- LeetCode:627.交换工资
题目链接:https://leetcode-cn.com/problems/swap-salary/ 题目 给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值.交换所有的 ...
- Innosetup设置控制面版中的名称显示和图标
//设置控制面板中程序图标UninstallDisplayIcon={app}\logo.ico //设置控制面板中程序的名称Uninstallable=yesUninstallDisplayName ...