首页 > [JSOI2007]建筑抢修
头像 zzugzx
发表于 2020-05-25 13:39:30
题目链接 题意:题解: AC代码 /* Author:zzugzx Lang:C++ Blog:blog.csdn.net/qq_43756519 */ #include<bits/stdc++.h> using namespace std; #define 展开全文
头像 19_hanhan
发表于 2020-05-26 19:00:00
题目 题目描述: 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者。 但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全 毁坏。 现在的情况是:T部落基地里只有一个修理工人, 展开全文
头像 sunrise__sunrise
发表于 2020-05-26 10:37:39
贪心、优先队列 看起来和放电影的贪心有点类似,不过这个是给出花费时间和截至时间,开始时间需要人为干预。那怎么办?首先我们考虑,是不是还是截至时间越前越先处理。如果一个东西截至时间越早,如果我处理之后不超过截止时间,那么优先处理,因为你后面换别的过来,也是+1,留给后面的时间反而变少了。)贪心那么这里 展开全文
头像 与人无语
发表于 2020-05-26 21:15:54
这是一个典型的贪心题(一看到题目我就发现早就写过了 复制粘贴就过了我们首先排序一下截止时间从小到大 然后用一个大根堆存维修时间 用一个变量存总维修时间当这个抢修这个新的房子发现时间不够时 弹出大根堆堆顶 如果减去这个时间加上当前时间小于之前的时间 就可以更新了 把抢修那个房子换成这个房子 展开全文
头像 JQK2020
发表于 2020-05-26 15:39:43
题目描述小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全 毁坏。现在的情况是:T部落基地里只有一个修理工人,虽然他能瞬间到达任何一个建筑,但是修 展开全文
头像 小嗷犬
发表于 2023-08-18 20:29:57
考察知识点:贪心、优先队列 读入每个建筑的信息,按照每个建筑修理的截止时间 t2 升序排序,然后依次将建筑修理的时间 t1 加入优先队列(大根堆),同时维护当前建筑修理的时间之和 time,当当前建筑修理完成后的时间大于截止时间时,如果当前建筑所需的修理时间 t1 小于优先队列顶端的建筑所需的修理时 展开全文
头像 在刷题的单身狗很开心
发表于 2023-09-14 17:31:42
先按照最晚修理时间进行排序,从最早的开始进行遍历。进来后如果可以达到最晚修理时间那么直接加入即可,如果达不到的话,与我已有的建筑的修理时间进行比较如果修理时间比原有的小的话那么就需要对原来的建筑进行一个调整,如果大的话不变就行,总之是一个一换一的过程,但同时也为后面腾出了更多的修理时间,所以贪心成立 展开全文
头像 18duangduang
发表于 2020-05-27 16:40:51
题目大意:给定n个任务,每个任务完成所需时间和截止完成时间,求最多能完成多少个任务. 分析:考虑贪心策略。我们每次选择任务完成一定是要最后完成任务的时间尽可能的小,并且当前的时间加上完成当前选择任务的时间一定要小于任务的截止时间才有效。这个我们可以将所有任务按照截止时间排序。那么对于当前时间加上任务 展开全文
头像 Bernard5
发表于 2020-05-27 20:07:50
题意: 和张老师的旅行看上去很像但是并不一样,这题比较水,直接贪心就可以了。 对截止时间早晚来贪心。 当出现建筑无法修复的时候,如果修复这个建筑所需要消耗的时间,比我之前所修复的所有建筑里最耗时的要短,那就修复这个,放弃之前的那个。 两段贪心,使用大根堆来实现。 #include <bit 展开全文
头像 虽然吧_但是
发表于 2020-05-27 09:10:27
这题的思路和https://ac.nowcoder.com/acm/problem/50439 类似在我们看来,每一段都存在一个截至区域,首先肯定是要把截至区域按从小到大的顺序排列,这样之前的选择会为后面的选择腾出更多的时间,这个贪心就是可行的。既然所选需要最多,有些我选择过后,如果当前总和小于截至 展开全文