HDU 6076 (动态规划)
HDU 6076 Security Check
Problem :
有两个长度为n的队列过安检,每个人有一个特征值。如果两个队列中的第一个人的特征值之差小于等于k,那么一次只能检查其中一个人,否则一次可以检查两个人。每次检查花费1的世时间。问最后检查完所有人之后所需要的时间。(n <= 60000, k <= 10)(3s时限)
Solution :
容易想到一个dp方程,dp[i][j]表示当前检查到a队列第i个人,b队列第j个人。
dp[i][j] = dp[i - 1][j - 1] + 1 ( abs(a[i] - b[j] > k)
dp[i][j] = min(dp[i - 1][j] + dp[i][j - 1]) + 1 ( abs(a[i] - b[j] <= k)
从二维平面的角度考虑,每个点的决策相当于是从左、下、左下三个方向转移过来。
注意到 k<=10,即在多数情况下状态由左下方转移过来,少数点来自于左或下。
因此可以对于每个对角线维护一个dp值,对于每个需要从左或下转移的关键点进行处理。其状态可以由下方或者左方对应的对角线上的状态转移过来。
最后若终点不是关键点,特殊处理一下。
#include <iostream>
#include <algorithm>
using namespace std;
const int INF = 1e8 + 7;
const int N = 600008;
int dp[N << 1], f[N << 1];
int a[N], b[N], ref[N];
int sol[N];
int n, k;
void init()
{
cin >> n >> k;
for (int i = 1; i <= n; ++i) cin >> a[i];
for (int j = 1; j <= n; ++j)
{
cin >> b[j];
ref[b[j]] = j;
}
}
void solve()
{
for (int i = - n - 1; i <= n + 1; ++i) dp[i + N] = INF;
for (int i = 0; i <= n; ++i)
dp[i + N] = i, f[i + N] = 0;
for (int i = 0; i <= n; ++i)
dp[-i + N] = i, f[-i + N] = i;
for (int i = 1; i <= n; ++i)
{
int tot = 0;
for (int j = a[i] - k; j <= a[i] + k; ++j)
{
if (j <= 0) continue;
if (j > n) continue;
sol[++tot] = ref[j];
}
sort(sol + 1, sol + tot + 1);
for (int j = 1; j <= tot; ++j)
{
int tmp = sol[j] - i + N;
dp[tmp] = min(dp[tmp + 1] + i - 1 - f[tmp + 1] + 1, dp[tmp - 1] + i - f[tmp - 1] + 1);
f[tmp] = i;
}
}
if (abs(a[n] - b[n]) > k) dp[N] = dp[N] + n - f[N];
cout << dp[N] << endl;
}
int main()
{
cin.sync_with_stdio(0);
int T; cin >> T;
while (T--)
{
init();
solve();
}
}
HDU 6076 (动态规划)的更多相关文章
- HDU 6076 - Security Check | 2017 Multi-University Training Contest 4
/* HDU 6076 - Security Check [ DP,二分 ] | 2017 Multi-University Training Contest 4 题意: 给出两个检票序列 A[N], ...
- hdu 1087 动态规划之最长上升子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1087 Online Judge Online Exercise Online Teaching Online C ...
- 2016多校第4场 HDU 6076 Security Check DP,思维
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6076 题意:现要检查两条队伍,有两种方式,一种是从两条队伍中任选一条检查一个人,第二种是在每条队伍中同 ...
- hdu 6076 Security Check
题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6076 2017 Multi-University Training Contest - Team 4 ...
- HDU 1003 动态规划
http://acm.hdu.edu.cn/showproblem.php?pid=1003 这几天开始刷动归题目,先来一道签到题 然而做的并不轻松, 没有注意到边界问题, WA了几发才发现 #inc ...
- hdu 4055 && hdu 4489 动态规划
hdu 4055: 一开始我想的递推方向想得很复杂,看了别人的博客后才醍醐灌顶: 参照他的思路和代码: #include<cstdio> #include<cstring> # ...
- hdu 4745 动态规划
思路:特水的一个最长回文子序列动态规划.比赛时硬卡第一题,49WA后终于AC,可惜没时间做这题,结果成绩也就可想而知了.兔子跳一样权值的石头,并且一个正跳,一个反跳,这不就是个回文子序列吗?????! ...
- hdu 4711 动态规划
思路:其实这题是个挺水的动态规划,一开始就能AC,可是不知道错哪了,瞎改瞎交,WA了数十次.AC之后怎么改都是AC,也不知道改了什么地方,郁闷死了~~~难道开始时的测试数据有问题??? dp[i][j ...
- HDU 1171 Big Event in HDU (动态规划、01背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
随机推荐
- 简要记录下localStorage在项目中的应用之一
localStorage作为HTML5本地存储web storage特性的API之一,主要作用是将数据保存在客户端中.localStorage保存的数据,一般情况下是永久保存的,也就是说只要采用loc ...
- Android studio 时间选择器
相当简单加载 gradle文件然后做一个textview即可. 1.首先我们要在build.gradle中写上这一行代码: compile 'com.feezu.liuli:timeselector: ...
- 版本号比较versioncompare方法,java实现
测试
- 从URL输入到页面展示都发生了什么?
总的来说分为以下过程: DNS解析 TCP三次握手 发送HTTP请求 服务器端处理请求并返回HTTP保文 浏览器渲染页面 断开连接:TCP的四次挥手 URL到底是什么? URL(Uniform Res ...
- Java Web开发之Spring | SpringMvc | Mybatis | Hibernate整合、配置、使用
1.Spring与Mybatis整合 web.xml: <?xml version="1.0" encoding="UTF-8"?> <web ...
- cnbeta新闻资讯第三方客户端应用
该源码案例是一个cnbeta第三方客户端应用案例,作者ywwxhz,源码cnBeta-reader,cnbeta 的 Android 客户端项目. 源码下载: http://code.662p.com ...
- itop安装中使用nginx安装后不能出现enter itop的问题
安装中没有出现enter itop,  如下的网络请求给了我们原因 原来使用的是域名请求资源文件,而该域名并不能指向我的服务器,所以安装中资源文件请求不成功,查看了我的nginx配置,如下 [ro ...
- SQLite – GLOB子句
SQLite – GLOB子句 .与LIKE不同,GLOB是大小写敏感的,它遵循语法的UNIX指定以下通配符. The asterisk sign (*) The question mark (?) ...
- Asp.Net Core 入门(一)——Program.cs做了什么
ASP.NET Core 是微软推出的一种全新的跨平台开源 .NET 框架,用于在 Windows.Mac 或 Linux 上生成基于云的新式 Web 应用程序.国内目前关于Asp.Net Core的 ...
- OpenCV2:第五章 访问图像
一.行/列访问 1.单行/单列访问 Mat Mat::row(int i) const Mat Mat::col(int j) const 2.多行/多列访问 Range(start,end); Ra ...