[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 箱子位置单调,所以 ...
随机推荐
- Docker 上安装、启动 MySQL
在docker仓库中搜索mysql的镜像: docker search mysql ; 下载镜像,这里我们安装 5.7 版本 docker pull mysql:[TAG]; 不写TAG默认拉取最新版 ...
- console.log 如何打印对象
问题描述: var obj={a:1,b:2}; console.log(obj); 控制台返回的值是object. 解决方案: console.log(JSON.stringify(obj))
- Uva 136 丑数
n^2暴力就完事,但是上限要高,不然就算不到对应的1500,刘汝佳的写法更好. #include <bits/stdc++.h> using namespace std; const in ...
- 台电X16pro刷机记录
Android: 如果要刷安卓,需要使用win7系统电脑,且需要安装java环境,同时按住 音量减+电源键进入刷机模式(DNX BOOT MODE..),这时在PhoneFlashTool_5.3.2 ...
- java内存模型中工作内存并不一定会同步主内存的情况分析
其实是为了填之前的一个坑 在一个多线程的案例中出现了阻塞的情况. https://www.cnblogs.com/hetutu-5238/p/10477875.html 其中的第二个问题,即多个 ...
- sqlite3 install 和使用
windows: 在 Windows 上安装 SQLite 请访问 http://www.sqlite.org/download.html,从 Windows 区下载预编译的二进制文件. 您需要下载 ...
- centos7 安装pip2和pip3
linux pip2 安装cd /usr/bin yum install -y epel-release yum install -y python-pip _____________________ ...
- Druid数据源SQL数据库与Spring监控
Druid监控概要说明 为什么要监控? Druid是什么?德鲁伊 URL监控配置说明 配置步骤 步骤 配置 第一步 web.xml 配置 WebStatFilter 第二步 WebStatFilter ...
- BeautifulReport底层框架的解析以及html报告页面元素的更改
利用BeautifulReport 模块生成html报告 import BeautifulReport as br#引入包,之后设置一下别名 br = br.BeautifulReport(test_ ...
- 基于SLAM的移动机器人硬件设备参数
1.移动机器人底盘 移动底盘有多大 长宽高:35*35*40cm 移动底盘有多重 17kg 底盘最大载重是多少 40kg 底盘最大速度是多少 1.2m/s 底盘的电池是多大 24V/7.8A 锂离子电 ...