P3572 [POI2014]PTA-Little Bird
P3572 [POI2014]PTA-Little Bird
一只鸟从1跳到n。从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制k,求每次最少耗费多少体力
很简短的题目哼。
首先对于一个点, 他的状态一定是由前 \(k\) 个转移过来的。 \(k\) 的长度在每组询问内一定, 想到用单调队列维护 \(dp\) 。
不过此时单调队列里的元素有两个关键字: 劳累度和高度, 因为跳到比这个点高的树需要花费恒为一点体力(这个很重要), 所以我们维护单调队列的时候可以以劳累度为第一关键字, 高度为第二关键字进行比较, 为多个关键字的单调队列
解释一下为什么体力花费恒为一点很重要。 这里运用了一点贪心的思想: 此题的高度对体力消耗没有影响, 只有高和矮两种说法。 只要我的劳累值比你小, 不管你的高度有多低, 我 $ + 1$ 一定 \(<=\) 你, 所以可以把高度作为第二关键字比较, 从而不影响结果
Code
教训: 多次调用简单函数会大大降低算法的效率, 开一波 \(O2\) 才没 \(T\) 。
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
int RD(){
int flag = 1, out = 0;char c = getchar();
while(c < '0' || c > '9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const int maxn = 1000019;
int len, num ,k;
int h[maxn];
int dp[maxn];
struct Que{
int h, val, index;
Que (int h, int val, int index): h(h), val(val), index(index){}
Que(){};
bool operator < (Que const &a)const{
if(val != a.val)return val < a.val;
return h > a.h;
}
}Q[maxn];
int head, tail;
void push_back(Que x){
while(head <= tail && x < Q[tail])tail--;
Q[++tail] = x;
}
void check(int x){
while(x - Q[head].index > k)head++;
}
int get_min(){return Q[head].val;}
int main(){
len = RD();
for(int i = 1;i <= len;i++)h[i] = RD();
num = RD();
while(num--){
k = RD();
head = 1, tail = 0;Q[head] = Que(1e9 + 19, 0, 0);
memset(dp, 0, sizeof(dp));
for(int i = 1;i <= len;i++){
check(i);
if(h[i] < Q[head].h)dp[i] = get_min();
else dp[i] = get_min() + 1;
push_back(Que(h[i], dp[i], i));
}
printf("%d\n", dp[len]);
}
return 0;
}
P3572 [POI2014]PTA-Little Bird的更多相关文章
- 洛谷P3572 [POI2014]PTA-Little Bird
P3572 [POI2014]PTA-Little Bird 题目描述 In the Byteotian Line Forest there are nn trees in a row. On top ...
- [luogu]P3572 [POI2014]PTA-Little Bird(单调队列)
P3572 [POI2014]PTA-Little Bird 题目描述 In the Byteotian Line Forest there are nn trees in a row. On top ...
- 题解 P3572 [POI2014]PTA-Little Bird
P3572 [POI2014]PTA-Little Bird 首先,这道题的暴力dp非常好写 就是枚举所有能转移到他的点,如果当前枚举到的位置的值大于 当前位置的话,\(f[i]=min(f[i],f ...
- luogu P3572 [POI2014]PTA-Little Bird |单调队列
从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制,求每次最少耗费多少体力 #include<cstdio> #include<cstring> #i ...
- luogu P3572 [POI2014]PTA-Little Bird
题目描述 从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制,求每次最少耗费多少体力 单调队列优化动态规划 #include<cstdio> #include&l ...
- 【BZOJ】【3831】【POI2014】Little Bird
DP/单调队列优化 水题水题水题水题 单调队列优化的线性dp…… WA了8次QAQ,就因为我写队列是[l,r),但是实际操作取队尾元素的时候忘记了……不怎么从队尾取元素嘛……平时都是直接往进放的……还 ...
- DP的各种优化(动态规划,决策单调性,斜率优化,带权二分,单调栈,单调队列)
前缀和优化 当DP过程中需要反复从一个求和式转移的话,可以先把它预处理一下.运算一般都要满足可减性. 比较naive就不展开了. 题目 [Todo]洛谷P2513 [HAOI2009]逆序对数列 [D ...
- [DP浅析]线性DP初步 - 2 - 单调队列优化
目录 #0.0 前置知识 #1.0 简单介绍 #1.1 本质 & 适用范围 #1.2 适用方程 & 条件 #2.0 例题讲解 #2.1 P3572 [POI2014]PTA-Littl ...
- DP 优化方法合集
0. 前言 写完这篇文章后发现自己对于 DP 的优化一窍不通,所以补了补 DP 的一些优化,写篇 blog 总结一下. 1. 单调队列/单调栈优化 1.2 算法介绍 这应该算是最基础的 DP 优化方法 ...
随机推荐
- 树莓派 Raspberry-Pi 折腾系列:系统安装及一些必要的配置
入手树莓派将近一个月了,很折腾,许多资源不好找,也很乱.简单整理一下自己用到的东西,方便以后自己或别人继续折腾. 0. 操作系统下载 树莓派官方 Raspbian 系统下载:http://www.ra ...
- 软工实践-Beta 冲刺 (2/7)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...
- 福州大学软工1816 K 班助教总结
春节时期总有各种诱惑因素(例如路人超能第二季),拖到现在才发布十分抱歉orz. 一.感谢 首先对柯老师和软工助教指导团队这一学期以来的支持和指导表示感谢.第一次做助教,有时候会提出一些不大成熟的想法, ...
- opencv的安装和卸载
安装 测试环境为centos 安装依赖 yum install cmake gcc gcc-c++ gtk2-devel gimp-develgimp-devel-tools gimp-help-br ...
- lr基本的概念
并发用户数量:与服务器进行交互的在线用户数量 请求响应时间:从client端发出请求到得到响应的整个时间,它一般包括网络相应时间+server的响应时间 事务请求响应时间:完成这个事务所用的时 ...
- windows下python3.6安装pycryto or crypto or pycryptodome与使用
pycrypto,pycrytodome和crypto是一个东西,在很久以前,crypto在python上面的名字是pycrypto它是一个第三方库,但是已经停止更新三年了,所以不建议安装这个库: w ...
- virsh 操作kvm虚拟机
#查看你的硬件是否支持虚拟化.命令: [root@VM_166_143 data]#egrep '(vmx|svm)' /proc/cpuinfo #安装基础包 [root@VM_166_143 da ...
- 微信小程序 功能函数 客服
<view> <view class='btn-img'> <image class='image-full' src='../../imgs/index/tab6.pn ...
- js & click copy to clipboard
js & click copy to clipboard https://www.cnblogs.com/xgqfrms/p/9999061.html https://www.cnblogs. ...
- nowcoder 202H-卡牌游戏
题目链接 题目描述 小贝喜欢玩卡牌游戏.某个游戏体系中共有N种卡牌,其中M种是稀有的.小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝.普通卡可能多次出现,而稀有卡 ...