[POI 2014]PTA-Little Bird
Description
给你 \(n\) 棵树,第 \(i\) 棵树的高度为 \(d_i\)。有一只鸟从 1 号树出发,每次飞跃不能超过 \(k\) 的距离。若飞到下一棵树的高度大于等于这一棵树那么耗费一点体力,否则不会。问你飞到第 \(n\) 棵树耗费最少体力为多少。多测,测试组数 \(q\)。
\(1\leq n\leq 10^6,1\leq q\leq 25\)
Solution
朴素的 \(O(n^2)\) DP 是很容易想到的,记 \(f_i\) 表示飞到 \(i\) 上的最小花费。那么,\(f_i=\min\limits_{i-j\leq k} f_j+[d_i\geq d_j]\)。
容易发现,最优的答案一定可以从所有满足条件的 \(j\) 中 \(f_j\) 最小的地方转移过来,即 \(f_i\) 的值只可能是 \(\min\limits_{i-j\leq k} f_j\) 或 \(\min\limits_{i-j\leq k} f_j+1\)。
那么可以开一个单调队列维护满足条件的 \(j\),并且满足 \(f\) 单调;在 \(f\) 相同的同时 \(d\) 单调递减(从越高的树转移越优)。
Code
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+5;
int n, t, a[N], k, q[N], head, tail, f[N];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
scanf("%d", &t);
while (t--) {
scanf("%d", &k);
q[head = tail = 1] = 1;
for (int i = 2; i <= n; i++) {
while (i-q[head] > k) ++head;
f[i] = f[q[head]]+(a[q[head]] <= a[i]);
while (head <= tail && (f[i] < f[q[tail]] || (f[i] == f[q[tail]] && a[i] >= a[q[tail]]))) --tail;
q[++tail] = i;
}
printf("%d\n", f[n]);
}
return 0;
}
[POI 2014]PTA-Little Bird的更多相关文章
- [POI 2014] Little Bird
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3831 [算法] 单调队列优化动态规划 时间复杂度 : O(N) [代码] #incl ...
- bzoj 3522 / 4543 [POI 2014] Hotel - 动态规划 - 长链剖分
题目传送门 bzoj 3522 需要root权限的传送点 bzoj 4543 快速的传送点 慢速的传送点 题目大意 给定一棵树,问有多少个无序三元组$(x, y, z)$使得这三个不同点在树上两两距离 ...
- [POI 2014]RAJ-Rally
Description 题库链接 给定一个 \(N\) 个点 \(M\) 条边的有向无环图,每条边长度都是 \(1\).请找到一个点,使得删掉这个点后剩余的图中的最长路径最短. \(1\leq N\l ...
- 解题:POI 2014 Ant colony
题面 既然我们只知道最后数量为$k$的蚂蚁会在特殊边上被吃掉,不妨逆着推回去,然后到达每个叶节点的时候就会有一个被吃掉的蚂蚁的区间,然后二分一下就好啦 #include<cstdio> # ...
- POI 2014 HOTELS (树形DP)
题目链接 HOTELS 依次枚举每个点,以该点为中心扩展. 每次枚举的时候,从该点的儿子依次出发,搜完一个儿子所有的点之后进行答案统计. 这里用了一个小trick. #include <bits ...
- [POI 2014] Couriers
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3524 [算法] 首先离线 , 将询问按右端点排序 如果我们知道[l , r]这个区间 ...
- bzoj 3872 [ Poi 2014 ] Ant colony —— 二分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3872 从食蚁兽所在的边向叶节点推,会得到一个渐渐放大的取值区间,在叶子节点上二分有几群蚂蚁符 ...
- Solution -「POI 2014」「洛谷 P5904」HOT-Hotels 加强版
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的树,求无序三元组 \((u,v,w)\) 的个数,满足其中任意两点树上距离相等. \(n\le1 ...
- POI题解整合
我也不知道为啥我就想把POI的题全都放到一篇blog里写完. POI 2005 SAM-Toy Cars 贪心,每次选下次出现最晚的. POI 2006 KRA-The Disks 箱子位置单调,所以 ...
随机推荐
- Windows下配置Erlang环境
1.下载地址 http://www.erlang.org/downloads 2.下载文件 下载 OTP 22.2 Windows 64-bit Binary File 3.配置环境变量 将下载的安装 ...
- Bugku-CTF加密篇之这不是md5(666c61677b616537333538376261353662616566357d)
这不是md5 666c61677b616537333538376261353662616566357d
- zookeeper使用及安装
1.安装查看:http://ifeve.com/zookeeper-talk-quick-start/ 2.使用: Zookeeper是一个高性能的分布式应用协调服务的框架.Zookeeper=Zoo ...
- LeetCode日常小习题
LeetCode练习题: 1.给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入 ...
- Windows 10下一步一步创建 Scrapy框架的项目
此文是本人的学习笔记,网上搜索了很多资料,也走了一些弯路,记录下安装的过程,以便日后回顾 1.安装Anaconda3,安装时默认选项 2.装完Anaconda3后,打开系统变量在path路径下增加An ...
- pdf .js和tableexport.js使用时遇到的2问题。
pdf .js 问题一:报错 network.js:71 The provided value 'moz-chunked-arraybuffer' is not a valid enum value ...
- cnblogs 自定义主题字体渲染方案
渲染效果图 由于我一直偏好衬线字体,所以在采用 Silence 主题 之后,还参照谢益辉的博客字体方案进行了改进 首先,在页首代码中添加盘古之白,如果你同时编写 中/英 文博客,你当然应该学习谢益辉的 ...
- [Thiinking in Java]自闭学习之路(一)构造器
前言- 本文是为个人学习做的整理性质的笔记,肯定带有许多不妥的地方,仅供参考. (第五章·初始化与清理 <Thinking in Java>) 用构造器确保初始化 正文- 构造器: 什么是 ...
- ParameterizedType 使用方法
ParameterizedType 它是jdk提供的参数化类型,包括了如下 请求参数,和响应参数都是 参数话类型.记住凡是含有<T>中的都是参数话类型. public static < ...
- Emprie 使用基础笔记
0x01 简介 empire 是一个后渗透攻击框架,具有加密通信和灵活框架的功能.Empire可以在不需要Powershell.exe的情况下执行PowerShell代理,后期利用的模块很强大,如sc ...