HNUCM 1985: 小h的书桌
题目描述
强迫症小h在整理书库,准备把书全部摆放在书桌上,摆放若干堆。
小h要求:书桌上的每堆书必须按照书本厚度从小到到大排序(也就是每堆书下面的不能比上面的薄,可以一样)。
小h会从书库里一本一本地拿书出来,然后进行摆放,请问小h最少需要摆放多少堆,才能摆好所有书籍。
输入
第一行一个整数,表示书库书本总数量(1≤n≤10^5)
第二行个整数,表示书本厚度(1≤ai≤30000)
输出
输出一个整数,表示小h最少需要摆放堆数。
样例输入
8
389 207 155 300 299 170 158 65
样例输出
2
提示
最少需要摆放两堆
第一堆:398-207-155-65
第二堆:300-299-170-158
分析:这一题就是我的文章,《记录我的拉胯时刻》的文章中提及的,一道稍微进阶的最长递增子序列的模板题。
先分析复杂度!n^5,如果我们直接使用朴素的求解最长递增子序列的方法,复杂度为O(n^2),很显然是会超时的。
现在转念一想,当初学的利用二分的求解LIS的方法的真正用意了,这个复杂度是O(nlogn),是不会超时的。
思路是这样的:
按照题目要求的来走,我们的每一堆书都满足最长非严格递减子序列,转念一想,用贪心的思想去思考,我们可以开出一个数组ans用来存储每一个最长非严格递减子序列的最小元素。因此当我们遍历我们输入的内容的时候,当此时的数可以在ans数组里面找到比他更大的或者相等的,那么就替代ans中的这个数。(注意,在ans数组里面找到的比该元素大的数可能不止一个,但是我们要选择最小的一个,这样符合贪心的思想,才能使得一叠书更厚,也就间接使得书的堆数减少了,是不是感觉很想用lower_bound函数?);而当我们在ans中无法找到比此数更大的数了,怎么办?很明显,无论哪一叠书,我们都没办法放上去,因此自成一派,成为一堆书。这就是运用了贪心的思想。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int ans[10005],len;
int main(){int n,a;cin>>n;while(n--){scanf("%d",&a);int id=lower_bound(ans,ans+len,a)-ans;if(id<len)ans[id]=a;else ans[len++]=a;}printf("%d\n",len);
}
HNUCM 1985: 小h的书桌相关推荐
- 小H和游戏(无根树转有根树,思维)难度⭐⭐⭐★
链接:https://ac.nowcoder.com/acm/contest/5203/D 来源:牛客网 题目描述 小H正在玩一个战略类游戏,她可以操纵己方的飞机对敌国的N座城市(编号为1~N)进行轰 ...
- 牛客Wannafly挑战赛10 A.小H和迷宫
链接:https://www.nowcoder.com/acm/contest/72/A 来源:牛客网 题目描述 小H陷入了一个迷宫中,迷宫里有一个可怕的怪兽,血量有N点,小H有三瓶魔法药水,分别可以 ...
- 科林明伦杯哈尔滨理工大学第八届程序设计竞赛——Hrbust-2378 小H的问题(模拟)
Description 小H是一个可爱的女孩,她特别喜欢看推特(tweeter).有一天她得到了某位用户的一些推特消息,想从中提取出这个用户在这些消息中@了哪些人.但是这些消息太长了,她想请你来帮她完 ...
- 小 H 的数字c++
题目描述 小 H 有一天突发奇想,写下了一串数字:l(l+1)(l+2)...(r-1)r.例如: l = 2,r = 5 时,数字为:2345; l = 8,r = 12 时,数字为:8910111 ...
- Vijos P1986 小h的妹子树二
Vijos P1986 小h的妹子树二 题目 背景 小h同学的妹子实在是太多辣,多的他又种下了一颗妹子树. 描述 树上有n个妹子,两两之间有且仅有一条路径. 小h每次想泡两个妹子,但是妹子是一种奇怪的 ...
- 小H和迷宫(C++)
题目描述 小H陷入了一个迷宫中,迷宫里有一个可怕的怪兽,血量有N点,小H有三瓶魔法药水,分别可以使怪兽损失a%.b%.c%的血量(之后怪兽的血量会向下取整),小H想合理地运用这三瓶药水,使怪兽失去 ...
- 小H的硬币游戏(后悔贪心)
题目描述 小 H 参加了一场神秘的游戏.游戏中有 n 堆硬币,第 i 堆价值 ai.每次小 H 可以选择编号相差 k 的硬币同时拿走.注意拿走后硬币不进行重标号.小 H 想知道最多能拿走多大价值的硬币 ...
- XMUOJ·小H的塔防游戏2
小H的塔防游戏2 题目描述 小H在你的帮助下成功通过了塔防游戏1. 现在来到了第二关,有一个n*n的地图,地图中'X'代表障碍物,'.'代表空地. 小H需要在空地上建防御塔,规定任意两个防御塔不能位于 ...
- XMUOJ·小H的超大背包
小H的超大背包 题目描述 小H有一个容量特别大的背包,用来装一些体积很大的物品. 每个物品都有一个价值,并且只有一件 请你帮助小H计算这个超大背包最大能装多少价值的物品,并且这些物品的总体积不超过背包 ...
最新文章
- 实用Common Lisp编程——函数
- CentOS修改yum源为阿里云
- ln -s 的一个坑
- 十六、PHP框架Laravel学习笔记——构造器的增删改
- 2018 腾讯功能游戏开发者赛事火热开启
- HttpClient发送get post请求和数据解析
- val text html
- 服务器win10系统开机慢,Win10系统开机慢怎么办 windows10开机慢的解决方法
- Rust : wasm尝试 与wasmtime库
- “中国互联网100强”(2013)发布
- PDF怎么转换成Word文字
- GetTickCount函数
- 极域电子教室豪华版v6.0.2021有哪些功能
- python将word文档转图片_如何将word文档转换为图片
- Google究竟怎么扣税,如何结算?你想知道的都在这里了
- 三大条件致病菌|大肠埃希氏菌、血链球菌、李斯特菌
- JavaScript实战手册(涵盖丰富的JQuery应用实例)
- 分享B2C来客推线上商城网站SEO优化方案
- 【轨迹规划】机械臂末端姿态轴角插补
- 漫画:为什么程序员没有女朋友?