UVA1422-Processor(二分法+优先队列)】的更多相关文章

题意:有n个任务,每个任务必须在在时刻[r, d]之内执行w的工作量(三个变量都是整数).处理器执行的速度可以变化,当速度为s时,一个工作量为w的任务需要 执行的时间为w/s个单位时间.另外不一定要连续执行,可以分成若干块.求处理器在执行过程中最大速度的最小值.处理器速度为任意的整数值.思路:起初的思路是整体贪心,就是把某个区间的任务量累加,然后对于当前区间能否满足限制速度,但是这样难以实现.第二个思路就是,对于某个时刻处理最快结束的(即右端点最小的),这显然是当前最优的选择. 代码: #inc…
题目链接:uva 1422 - Processor 题目大意:有一个机器要处理一些问题,给出这些问题可以开始的时间和必须完成的时间,以及任务的工作量,问说机器必须以最少每秒多少得工作量才能完成这些任务. 解题思路:二分答案,答案的上限是MaxWork * MaxN(全在一秒内完成).然后就是判断说在c的工作量小是否能完成任务.因为处理一个问题的时间可以不连续,所以给解题增加了难度. 现将任务按照开始的时间从小到大排序,然后枚举时间区间.开始时间比当前枚举时间小的话入队. 队列用优先队列,结束时间…
题意:有n个任务,每个任务有三个参数,r,d,w,表示该任务必须在[r,d]之间执行,工作量是w,处理器执行速度可以变化,当执行速度是s的时候, 一个工作量是w的任务需要需要的执行时间是w/s个工作单位,另外,任务不一定要连续的执行,可以分成若干块,求出处理器执行过程中最大速度的最小值, 速度必须是整数. 析:首先是二分这个速度,然后去判断是不是成立,判断的时候要用到优先队列,把把所有的任务按开始时间排序,然后去枚举每个时间点, 用优先队列去维护一个结束时间早的优先,在每个时间点判断是不是能完成…
option=com_onlinejudge&Itemid=8&category=512&page=show_problem&problem=4168">题目链接 题意:有n个任务,每一个任务必须在在时刻[r, d]之内运行w的工作量(三个变量都是整数).处理器运行的速度能够变化,当速度为s时,一个工作量为w的任务须要 运行的时间为w/s个单位时间. 另外不一定要连续运行,能够分成若干块. 求处理器在运行过程中最大速度的最小值. 处理器速度为随意的整数值.…
题目是求最小化最大值,很显然是二分,但是二分以后怎么判断mid是否可行并不容易. 代码参考了网上一个博客的代码.巧妙之处在于一秒一秒的考虑,这样可以把处理速度mid直接转化成1秒内实际的量来解决(避免小数问题),然后贪心考虑每次处理最早结束的工作即可.注意我这里的代码t表示的是一整秒,譬如[1,2]即t=1. 具体见代码: #include <stdio.h> #include <algorithm> #include <string.h> #include <q…
题目地址 分析:如果用二分法,关键是score和aid分开排序,score排序是为了充分利用中位数的性质,这样就可以确定m左右必须各选N/2个,到这之后有人是用dp求最优解,可以再次按照aid排序一次,可以直接确定最优解(肯定是从最小的开始选择!): #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int N, C, F; ; struct Cow{ int i…
二分法还是比较常见和简单的,之前也遇到过一些二分的相关题目,虽然不难,但是每次都需要在边界问题上诸多考虑,今天听了九章算法的课程,学习到一种方法使得边界问题简单化. 二分法的几个注意点: 1. mid = start + (end - start) / 2;//特定情况下,避免越界. 2.循环控制条件:start + 1 < end,这样处理的好处是可以避免使用start<end或者start<=end对于不同情况的不同处理逻辑. 3.理解二分法的三个层次: 保留首位两个指针,取重点,判…
1. 预备知识 (1) 基本概念     如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组A包括两个属性:A.length给出了数组的长度:A.heap-size表示有多少个堆元素保存在该数组中(因为A中可能只有部分位置存放的是堆的有效元素).     由于堆的这种特殊的结构,我们可以很容易根据一个结点的下标i计算出它的父节点.左孩子.右孩子的下标.计算公式如下: parent(i) =…
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author: Minion-Xu #list实现优先队列 class ListPriQueueValueError(ValueError): pass class List_Pri_Queue(object): def __init__(self, elems = []): self._elems = list(elems) #从大到小排序,末尾值最小,但优先级最高,方便弹出且效率为O(1) self.…
打印列表的疑问 class Node: def __str__(self): return "haha" print([Node(),Node()]) print(Node()) 输出为 [<__main__.Node object at 0x000000000311A208>, <__main__.Node object at 0x000000000311A358>] haha 打印列表调用的不是每个元素str吗?看来不是,那调用的是什么. 一个简单的实例 在…