当前位置: 首页 > news >正文

【bzoj3831】[Poi2014]Little Bird 单调队列优化dp

原文地址:http://www.cnblogs.com/GXZlegend/p/6826475.html


题目描述

In the Byteotian Line Forest there are   trees in a row. On top of the first one, there is a little bird who would like to fly over to the top of the last tree. Being in fact very little, the bird might lack the strength to fly there without any stop. If the bird is sitting on top of the tree no.  , then in a single flight leg it can fly to any of the trees no.i+1,i+2…I+K, and then has to rest afterward.
Moreover, flying up is far harder to flying down. A flight leg is tiresome if it ends in a tree at least as high as the one where is started. Otherwise the flight leg is not tiresome.
The goal is to select the trees on which the little bird will land so that the overall flight is least tiresome, i.e., it has the minimum number of tiresome legs. We note that birds are social creatures, and our bird has a few bird-friends who would also like to get from the first tree to the last one. The stamina of all the birds varies, so the bird's friends may have different values of the parameter  . Help all the birds, little and big!
有一排n棵树,第i棵树的高度是Di。
MHY要从第一棵树到第n棵树去找他的妹子玩。
如果MHY在第i棵树,那么他可以跳到第i+1,i+2,...,i+k棵树。
如果MHY跳到一棵不矮于当前树的树,那么他的劳累值会+1,否则不会。
为了有体力和妹子玩,MHY要最小化劳累值。

输入

There is a single integer N(2<=N<=1 000 000) in the first line of the standard input: the number of trees in the Byteotian Line Forest. The second line of input holds   integers D1,D2…Dn(1<=Di<=10^9) separated by single spaces: Di is the height of the i-th tree.
The third line of the input holds a single integer Q(1<=Q<=25): the number of birds whose flights need to be planned. The following Q lines describe these birds: in the i-th of these lines, there is an integer Ki(1<=Ki<=N-1) specifying the i-th bird's stamina. In other words, the maximum number of trees that the i-th bird can pass before it has to rest is Ki-1.

输出

Your program should print exactly Q lines to the standard output. In the I-th line, it should specify the minimum number of tiresome flight legs of the i-th bird.

样例输入

9
4 6 3 6 3 7 2 6 5
2
2
5

样例输出

2
1


题解

单调队列优化dp

设f[i]表示跳到i的最小劳累值,那么有f[i]=f[j]+(height[i]>=height[j])

由于f[i]-f[j]最大为1,所以从f[k]=f[j]+x转移过来一定不是最优,即f小的更优。

同时应尽量让height[j]大,所以当f相同时,height更大的更优。

据此我们可以维护一个单调队列,其中f单调递增,f相同时height单调递减。

然后判断边界更新f并加入到队列中即可。

#include <cstdio>
int a[1000010] , q[1000010] , f[1000010];
bool cmp(int x , int y)
{
	return f[x] == f[y] ? a[x] > a[y] : f[x] < f[y];
}
int main()
{
	int n , i , m , k , l , r;
	scanf("%d" , &n);
	for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &a[i]);
	scanf("%d" , &m);
	while(m -- )
	{
		scanf("%d" , &k);
		l = r = q[1] = 1;
		for(i = 2 ; i <= n ; i ++ )
		{
			while(l <= r && q[l] < i - k) l ++ ;
			f[i] = f[q[l]] + (a[q[l]] <= a[i]);
			while(l <= r && cmp(i , q[r])) r -- ;
			q[++r] = i;
		}
		printf("%d\n" , f[n]);
	}
	return 0;
}

 

转载于:https://www.cnblogs.com/GXZlegend/p/6826475.html

相关文章:

  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • bzoj4034: [HAOI2015]树上操作(树链剖分)
  • Leetcode 记录(1~100)
  • ArcGIS Server缓存清理
  • vmware和centos的安装
  • Vue.js中滚动条加载更多数据
  • 如何一键收藏微信文章?
  • 【Linux】【Services】【Project】Haproxy Keepalived Postfix实现邮件网关Cluster
  • 10.2.1 关于vc++不支持把类的成员函数定义为类的友元函数的处理
  • OC 手势可能出现的问题
  • Excel常用12个公式
  • Python web 框架:web.py
  • 【智能家居篇】通信技术简单介绍
  • Linux系统运维之MYSQL数据库集群部署(主主互备)
  • 基于ssh,shell,python,iptables,fabric,supervisor和模板文件的多服务器配置管理...
  • [NodeJS] 关于Buffer
  • 2017 年终总结 —— 在路上
  • avalon2.2的VM生成过程
  • CSS 三角实现
  • HomeBrew常规使用教程
  • HTTP中GET与POST的区别 99%的错误认识
  • interface和setter,getter
  • JavaScript标准库系列——Math对象和Date对象(二)
  • jquery ajax学习笔记
  • js如何打印object对象
  • JS题目及答案整理
  • k8s 面向应用开发者的基础命令
  • PHP面试之三:MySQL数据库
  • vuex 学习笔记 01
  • 观察者模式实现非直接耦合
  • 利用jquery编写加法运算验证码
  • 浅谈Golang中select的用法
  • 如何编写一个可升级的智能合约
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 深入浅出webpack学习(1)--核心概念
  • 算法-插入排序
  • 用简单代码看卷积组块发展
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #传输# #传输数据判断#
  • (3)(3.5) 遥测无线电区域条例
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (floyd+补集) poj 3275
  • (pojstep1.3.1)1017(构造法模拟)
  • (备忘)Java Map 遍历
  • (笔试题)分解质因式
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (一)SpringBoot3---尚硅谷总结
  • (转)平衡树
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET BackgroundWorker