现在的位置: 首页 > 综合 > 正文

贪心总结

2017年11月16日 ⁄ 综合 ⁄ 共 3232字 ⁄ 字号 评论关闭

经典贪心题:

1)旅行家的预算

2)节点网络

3)求最大得分

4)删数问题

5)取数游戏

6)独木舟

7)最大整数

8)Radar

转换模型—〉贪心求解

先算出每个岛在哪个区间范围内建立雷达站能够覆盖到这个岛,按左端点快排。第一个雷达建立在区间的右端,而后一次判断每个区间的左端点,如果在最新建立的雷达右面,那么肯定需要一个雷达,而且也建在区间右端。如果左端点在雷达左面,这个时候要考虑区间的右端在雷达的左面还是右面,如果是右面,那雷达位置就不变,如果在左面,那现在的雷达是覆盖不了的,所以要把雷达放在该区间的右端点!因为这样同时还能覆盖原来的岛,还能覆盖现在的岛!

 

9)活动安排问题

 描述: 一个由需要使用某一资源的n个活动组成的集合S = {1, 2, ... , n},该资源一次只能被一个活动占用。每个活动i有个开始时间s[i]和结束时间f[i],且s[i] <= f[i]。一旦被选择,活动i就占据半开时间区间[s[i], f[i])。如果[s[i], f[j])与[s[i], f[j])互不重叠,则称活动i和j是兼容的。活动安排问题就是要选择一个由互相兼容的问题组成的最大集合。

策略:先按结束时间Qsort,在依次选择兼容的活动。

10)wooden sticks

  题意:有n个木棒,分别不同的长度和不同的重量,一个机器需要处理这些木棒,如果第i+1个木棒的重量和长度都>=第i个处理的木棒,那么将不会耗费时间,否则需要增加一个单位的时间,问最少需要多少时间处理完(包括机器启动的时间)

策略:双关键字Qsort+模拟。

11)钓鱼

   题意:john现有h个小时的空闲时间,他打算去钓鱼。john钓鱼的地方共有n个湖,所有的湖沿着一条单向路顺序排列(john每在一个湖钓完鱼后,他只能走到下一个湖继续钓),john必须从1号湖开始钓起,但是他可以在任何一个湖结束他此次钓鱼的行程。john在每个湖中每5分钟钓的鱼数(此题中以5分钟作为单位时间),随时间的增长而线性递减。而每个湖中头5分钟可以钓到的鱼数以及每个湖中相邻5分钟钓鱼数的减少量,input中均会给出。并且John从任意一个湖走到它下一个湖的时间input中也都给出。

分析:(详见黑书“贪心法”)

先枚举要经过的湖的个数x,算出能钓鱼的次数k,在这个前提下,可看成John能瞬移,枚举k次,每次选取当前各湖中能钓到最多的鱼的湖即可(堆优化)。

12)多机调度问题

  题意:设有 n 个独立的作业 { 1 , 2 , .. , n },由 m 台相同的机器进行加工处理。作业 i 所需的处理时间为 ti。现约定,任何作业可以在任何一台机器上加工处理,但未完工前不允许中断处理。任何作业不能拆分成更小的作业。多机调度问题要求给出一种作业调度方案,使所给的 n 个作业在尽可能短的时间内由 m 台机器加工处理完成。

   分析:简单贪心,先Qsort。

13)区间覆盖问题

  题意:给定n个区间,求用不超过m条线段覆盖这些区间,使线段总长最短。

   分析:对于相邻区间之间的空段排序,不覆盖前m-1大的空段即可。

14)hdoj1009  FatMouse'Trade

   水题一道。类似于可拆分贪心01背包。此处不解释……

15)hdoj1050 Moving Tables

   比较水。现将这n*2个点映射到数轴上n个点,搬桌子次数的瓶颈就在区间覆盖次数最大的那个区间……

16)hdoj 今年暑假不AC

   活动安排问题,easy!可以贪心(右端点排序),也可DP。

17)hdoj1052 田忌赛马

  贪心策略:

  如果 田忌最弱>大王最弱 田忌最弱PK大王最弱

  如果 田忌最弱<大王最弱 田忌最弱PK大王最强

  如果 田忌最弱=大王最弱

         如果田忌最强>大王最强 田忌最强PK大王最强

         如果田忌最强<大王最强 田忌最弱PK大王最强

         如果田忌最强=大王最强 田忌最弱PK大王最强

18)poj1230 Pass-Muraille(即肖子沐出的“撞豆腐”)

  贪心策略:从左往右扫,若遇到不符合条件的,则优先干掉右边界最大的。

19)poj1505 copying books(书的复制)

  该题有两种解法:

  法1:DP easy

  法2:二分加贪心——枚举上界,贪心判可行

20)poj1477 水到家了……不解释……

21)poj1922 水。贪心!答案为非负的最早到达时间!

22)poj1716

题意:给出数轴上的n个区间,每个区间都是连续的int区间。

现在要在数轴上任意取一堆元素,构成一个元素集合V

要求每个区间和元素集合V的交集至少有两个不同的元素

求集合V最小的元素个数。

   典型贪心:先按区间有端点排序,然后按顺序尽量将  

   需要的放在区间右端。 

   还可以差分约束+Relax

23)poj1017

题意:一个工厂制造的产品形状都是长方体盒子,它们的高度都是 h,长和宽都相等,一共有六个型号,分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体箱子包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的箱子数量BoxNum。

策略:优先装型号大的。

24)poj3273 1505  3258三个属于同一类型题!!!

   二分枚举并判可行。

25)poj2709 painter

题意:一套涂料有3~12种颜色,每种颜色50ml。Emily上课需要n种颜色的涂料,第i种颜色需要color[i]ml,此外,Emily还需要grayml的灰色涂料,每ml灰色的涂料需要3种不同颜色的其他涂料各1ml融合而成。问emily要上课,至少需要买几套涂料?

思路:贪心。由于n很小,所以每次1ml的其他涂料融合成灰色时,再对他们进行排序。贪心策略:每次取用掉最少的前三种颜料各1lm配制。

26)poj1323  Game Prediction 

题意:n个人在玩牌,每个人有m张牌,于是就有n*m张牌(每张牌都有一个值,介于1到n*m之间,不重复),然后进行m轮游戏,每轮每个人都出一张牌,牌最大的那个人就赢了,然后给出n和m,以及你的m张牌,问你最多能赢几轮?

先看例子

6 11
62 63 54 66 65 61 57 56 50 53 48
分析一下容易知道,66和65必定能赢,而61,62和63之中必定有两张能赢(能赢他们的只有64,且只有一张),于是大致想法就出来了,从n*m开始递减到1,检查每张牌,如果该牌自己是否有,如果没有,则++n1(表示能赢自己其余牌的牌数),如果有,判断n1是否为0,如果是,那么能赢的局数就加一,不然的话就--n1,最后输出ans就行

27)poj2586  Y2K Accounting Bug

题意:对于MS Inc来说,每个月如果盈利则必盈利sur,如果亏空则必亏空def(这个公司很怪)。它每五个月进行一次统计,共统计八次(1-5月一次,2-6月一次...)。统计的结果是这八次都亏空。判断MS Inc全年否能盈利,如果能则求出最大的盈利。如果不能则输出"Deficit"。

思路:尽量将盈利的月份放区间前面,亏损的月份放区间后面。

28)poj1018  Communication System

题意:要购买n种装置来构建一个网络,每种装置有num[i]个厂商的商品可供选择,每种装置只买一个,对每一种装置,不同厂商的商品都有价格和最大带宽。组建好的网络的最大带宽B是所有装置最大带宽的最小值,价格P是所有装置价格之和,求B/P的最大值。1<=num[i],n<=100。

思路:枚举+贪心。枚举B值,各部件在B的限制下找到最小的P值,求个sigmaP[i],更新答案。

参考文献:

“依然”博客:http://blog.sina.com.cn/s/articlelist_1714784650_8_1.html

百度文库某文档(尤其是它的最后一页):

http://wenku.baidu.com/view/f2d44a08763231126edb111f.html

及各大牛博客

抱歉!评论已关闭.