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) 一看这题就很手 ...
随机推荐
- [LeetCode] 35. Search Insert Position 搜索插入位置
Given a sorted array and a target value, return the index if the target is found. If not, return the ...
- 初探Java设计模式5:一文了解Spring涉及到的9种设计模式
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...
- (五)golang--常用的一些玩意
\t--制表位 \n--换行符 \\--一个\ \"--一个” \r--回车 行注释://,一次性注释多行指令,选中代码后ctrl+/ 块注释:/* */ 代码规范: (1)官方推荐使用行注 ...
- win10下MYSQL的下载、安装以及配置超详解教程(转)
下载MYSQL 官网下载MYSQL5.7.21版本,链接地址https://www.mysql.com/downloads/.下载流程图如下: 进入官网点击Community,下载社区版. 找到MYS ...
- Redmine添加插件
注意:插件的安装必须到Plugins对应的文件目录执行命令! Plugins Plugin list A full list of available Redmine plugins can be f ...
- Docker 部署ELK之Sentinl日志报警
前篇文章简单介绍了Docker 部署ELK,以及使用filebeat收集java日志.这篇我们介绍下日志报警配置,这里我们使用Sentinl插件. 1.修改kibana参数 进入elk容器,修改对应参 ...
- springboot指定注解扫描范围
springboot注解扫描范围是由@ComponentScan指定的;默认情况下为启动程序所在目录及其子包; 如果需要指定扫描路径,在启动程序中添加修改 @ComponentScan(basePac ...
- 百度前端技术学院task1.10
任务十:Flexbox 布局练习 面向人群: 有一定HTML及CSS基础的同学 难度: 中 重要说明 百度前端技术学院的课程任务是由百度前端工程师专为对前端不同掌握程度的同学设计.我们尽力保证课程内容 ...
- Linux进程启动/指令执行方式研究
1. 通过glibc api执行系统指令 0x1:system() glibc api system是linux系统提供的函数调用之一,glibc也提供了对应的封装api. system函数的原型为: ...
- tkmybatis VS mybatisplus
本文是简单对比了以下官网上的内容 文章目录 TkMybatis Vs MybatisPlus 1.基础CRUD BaseMapper 2.代码生成器 3. 全局主键 Sequence主键 4. 热加载 ...