20180610模拟赛T4——木棍
有\(N\)根木棍,每根的长度\(L\)和重量\(W\)已知。这些木棍将被一台机器一根一根地加工。机器需要一些启动时间来做准备工作,启动时间与木棍被加工的具体情况有关。启动时间遵循以下规则:
- 加工第一根木棍的启动时间为1分钟。
- 加工完长度为\(L_i\),重量为\(W_i\)的木棍后,紧跟着加工长度为\(L_i+1\),重量为\(W_i+1\)的木棍时,若\(L_i\le L_i+1\)且\(W_i\le W_i+1\),则加工木棍\(i+1\)时,不需要启动时间。例如:有\(5\)根木棍,它们的长度和重量为\((9,4),(2,5),(1,2),(5,3),(4,1)\),则最小总启动时间为2分钟(加工序列为\((4,1),(5,3),(9,4),(1,2),(2,5)\))。
输入:
第一行一个整数\(n(1\le n\le 5000)\),表示木棍的数量。第二行\(2n\)个整数,\(l_1,w_1,l_2,w_2,cdots,l_n,w_n(1\le l_i,w_i\le 10000)\),为各根木棍的长度和重量,这\(2n\)个整数以若干个空格分隔。
输出:
一行: 一个整数,即最小总启动时间。
样例输入1
5
4 9 5 2 2 1 3 5 1 4
样例输出1
2
样例输入2
3
2 2 1 1 2 2
样例输出2
1
题解
我对这题的第一反应是DAG,于是建了一张图,发现对任意一个点往那边跑都没关系,如下图(图中1到所有点都要连一条边,但忘画了怕图太乱了,就没有连):
对于点1来说,往2还是往3是无关的:因为如果选2则3要跑一遍,选3则2要在跑一遍,两者结果是相同的。但是选4是不可行的,因为选2的方案更佳。
于是我们想到用一个pair
(我用了结构体),然后进行排序,对于每一个没有标记过的点直接往后找,第一个能连边的一定符合要求(否则在此之前一定有一个可以连边的点)。
复杂度\(O(n^2)\),听说可以用LIS的方法优化到\(O(n\log n)\)。
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 5005;
struct akking
{
int l, w;
inline bool operator < (const akking& other) const
{
return l < other.l || (l == other.l && w < other.w);
}
} sxd[maxn];
bool vis[maxn];
int n;
int main()
{
freopen("wooden.in", "r", stdin);
freopen("wooden.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d%d", &sxd[i].l, &sxd[i].w);
sort(sxd+1, sxd+n+1);
int ans = 0;
for(int i = 1; i <= n; ++i)
{
if(!vis[i])
{
ans++;
for(int j = i+1; j <= n; ++j)
{
if(!vis[j] && sxd[i].l <= sxd[j].l && sxd[i].w <= sxd[j].w)
{
vis[j] = true;
sxd[i] = sxd[j];
}
}
}
}
printf("%d", ans);
fclose(stdin);
fclose(stdout);
return 0;
}
20180610模拟赛T4——木棍的更多相关文章
- 20180610模拟赛T1——脱离地牢
Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...
- 20180606模拟赛T4——数学游戏
数学游戏 题目描述: 小T又发脑残了,没错,她又要求奇怪的东西,这次她想知道[X,Y]之间整数有多少可以表示成K个不同的B的幂的和形势.如\(x,y,k,b=15,20,2,2\),则有: \[17= ...
- 2017-9-10"切题如切菜杯"模拟赛T4 ZZI
题目 YYH拿到了父亲给的钱欣喜若狂,把这些钱拿来造了n栋房子.现在他要给这些房子通电.他有两种方法:第一种是在房间里搭核电发电机发电,对于不同的房子,他需要花不同的代价Vi:,第二种是将有电的房子i ...
- 20180610模拟赛T3——书本整理
[问题描述] 小明的书架上放了许多书,为了使书架变得整洁,小明决定整理书架,他将所有书按高度大小排列,这样排了之后虽然整齐了许多,但小明发现,书本的宽度不同,导致书架看上去还是有些凌乱.小明把这个凌乱 ...
- 20180523模拟赛T4——Number
[题目描述] 最近
- 【20170521校内模拟赛】热爱生活的小Z
学长FallDream所出的模拟赛,个人感觉题目难度还是比较适中的,难度在提高+左右,可能比较接近弱省省选,总体来讲试题考查范围较广,个人认为还是很不错的. 所有试题如无特殊声明,开启-O2优化,时限 ...
- 『2019/4/8 TGDay1模拟赛 反思与总结』
2019/4/8 TGDay1模拟赛 这次是和高一的学长学姐们一起参加的\(TG\)模拟考,虽然说是\(Day1\),但是难度还是很大的,感觉比\(18\)年的\(Day1\)难多了. 还是看一下试题 ...
- ATP学姐的模拟赛
ATPの水题大赛 声明:不是我觉得这题水,这就是本场模拟赛的名称. T1:求所有的$n$位数中有几个数满足:每一位要么是$A$要么是$B$,并且这个$n$位数的每一位加起来是$A$或$B$的倍数. $ ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
随机推荐
- linux内核动态调试技术
动态调试功能就是你可以决定在程序运行过程中是否要 pr_debug(), dev_dbg(), print_hex_dump_debug(), print_hex_dump_bytes() 这些函数正 ...
- 【redis】分布式锁实现,与分布式定时任务
如果你还不知道redis的基本命令与基本使用方法,请看 [redis]redis基础命令学习集合 写在前面 redis辣么多数据结构,这么多命令,具体一点,都可以应用在什么场景呢?用来解决什么具体的问 ...
- java十题
这是我收集的10个最棘手的Java面试问题列表.这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题.你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Jav ...
- idea创建maven多模块Spring Boot项目
1, 创建父项目 1.1,file - new - project 1.2,选择maven,Create from archetype(有的说不选,有的没说,不过我建父项目的时候没有勾选) 1.3,根 ...
- BScroll使用
当页面内容的高度超过视口高度的时候,会出现纵向滚动条:当页面内容的宽度超过视口宽度的时候,会出现横向滚动条.也就是当我们的视口展示不下内容的时候,会通过滚动条的方式让用户滚动屏幕看到剩余的内容. 话说 ...
- 管理ceph缓存池
目录 缓存池简介 缓存池原理 缓存池的工作模式 配置缓存池 1. 创建一个缓存池 2. 设置缓存层 3. 缓存层相关参数说明 4. 测试缓存池 删除缓存池 1. 删除read-only缓存池 2. 删 ...
- oracle 数据库创建用户并授权
oracle 数据库创建用户并授权 备注: userName 为用户名,123456 为密码 drop user userName cascade; create user userName iden ...
- 迅雷极速版开启强制升级迅雷X模式,网友出招
IT之家7月13日消息 近期,不少网友反馈,迅雷极速版已经开启强制用户升级到迅雷X的模式,而且不能关闭取消,并且会默认安装到C盘上 迅雷X是迅雷最新推出的下载客户端工具,使用Electron软件框架完 ...
- 【BZOJ4833】最小公倍佩尔数(min-max容斥)
[BZOJ4833]最小公倍佩尔数(min-max容斥) 题面 BZOJ 题解 首先考虑怎么求\(f(n)\),考虑递推这个东西 \((1+\sqrt 2)(e(n-1)+f(n-1)\sqrt 2) ...
- 【linux】linux磁盘空间 目录查看清理 和 文件查看清理
=========================大目录排查============================= 一.首先查看磁盘挂载,磁盘空间使用情况 1.进入根路径 cd / 2.查看磁盘挂 ...