
算法设计-贪心法
flowser
you are what you want to be
展开
-
uva11292 - The Dragon of Loowater (贪心)
题目:有n头恶龙,diameter存其直径,有m个骑士,height存其身高,国王雇佣骑士杀恶龙,佣金为所雇佣骑士身高之和,每个骑士只能杀一条龙且只能被雇一次,求国王需付最少佣金。思路:排序 + 贪心原创 2016-01-24 12:24:53 · 415 阅读 · 0 评论 -
uva311 - Packets
题意: 给你一个一组一定数目大小为1*1,2*2,3*3,4*4,5*5,6*6的小方块,让你装进一个6*6的方块里,求最少需要多少个6*6方块数 思路: 参考了别人的做法。 思路如下: 贪心 ,若有多余则先装2*2的,后装1*1的,因为装了2*2若有多余仍可拆分成1*1 6*6可装 -> 一个6*6 -> 一个5*5+11个1*1原创 2016-02-28 22:16:02 · 358 阅读 · 0 评论 -
uva10382 -Watering Grass
题意: 一长l宽w的草坪,水平中心线上有n个位置pi可安装喷水装置,其覆盖范围为以半径ri为圆。求最少需要多少个喷水装置。 思路: 首先,每个装置在长方形草坪上的有效覆盖面积为 左边界pos - sqrt((r*r - w*w / 4.0 ))到右边界 pos + sqrt((r*r - w*w / 4.0 ))宽l的长方形。这样记录下有效区间后此题就可转为经典区间覆盖问题。 代码如下:#i原创 2016-02-13 13:55:03 · 294 阅读 · 0 评论 -
uva10148 - Advertisement(区间选点)
题意: 贴广告牌,n个人,会分别在一个区间内跑步,区间点为整数,在这些整数里,你负责选点贴广告,让他们每个人都至少能看见K个广告,若区间范围小于k,则该区间都要贴广告 思路: 贪心题。参考了《算法经典入门》中做法,首先区间左小右大,然后按右边界排序,尽量多得在右边放广告牌,因为这样的话重叠部分小,所需放置的广告牌亦随之变小。代码如下:#include <iostream>#include <原创 2016-03-09 22:22:24 · 361 阅读 · 0 评论 -
uva757 - - Gone Fishing
一道很典型的贪心题,根据贪心决策,枚举会走到的湖泊(不走回头路),从最开始的湖泊依次到会走到的湖泊里钓鱼,扣除驾车时间后,将剩余时间划分为每次5分钟的时间段,在这些时间段里,贪心地找当前鱼最多的湖泊里钓鱼(因为扣除驾车时间,仅需考虑到哪钓鱼即可),若时间用不完,则剩余时间加到第一个钓鱼地点上。 代码如下: 代码:#include <iostream>#include <string.h>#i原创 2016-03-09 22:14:33 · 317 阅读 · 0 评论 -
uva10716 - - Evil Straw Warts Live
题意: 给你一个串,问你是否能改动它们的顺序使之成为回文,能改变的话,最小改动数呢 思路: 看到题目的第一思路是能不能通过记录相同字符的位置来做,想来想去还是枪毙了,参考了他人做法,思路清晰明了(T——T,感觉我老是把简单问题想得复杂化了,终究是没想到点上。) 贪心法,主要就是从两端开始确定,慢慢向中间缩进,若两端相同,则直接缩进,若不同,则双向搜索能替换左右使其相等的最近交换距离,直到成功原创 2016-03-05 13:32:41 · 261 阅读 · 0 评论 -
uva10670 - Work Reduction
题意: 老板给你n个任务,你只能最多留m个,你干不了就辞了你,现在一个机构能帮你完成任务,有A,B两种方案,金额不同,A能帮你完成1个,B能帮你完成当前的一半。 思路: 贪心的思路,题目要求的其实就是关于A,B的选择,如过当前扣掉一半后所得>=m而且经费画得比A少就选B,否则就选择A 代码:#include <iostream>#include <cstdio>#include <cst原创 2016-03-05 13:16:12 · 272 阅读 · 0 评论 -
uva11054 - Wine trading in Gergovia
题意: 一个镇上有卖酒和买酒的商家,然后假定这些商家的位置直线排列,给你它们买酒和卖酒数,然后它们恰好相同,但运酒要费用=到其它商家的距离(邻居的话距离为1)* 交易的酒数,求最小总费用。 思路: 贪心法,题目的运酒费涉及距离和酒数,卖酒和买酒的酒数相同,那么一给一供不管怎样抵消都是那么多,其实看的就是距离,这样的话直接邻居交易即可,从头到尾依次让当前这的需求由后者满足,就能得到最小费用 代原创 2016-03-05 12:45:52 · 413 阅读 · 0 评论 -
uva10602 - Editor Nottoobad
题意: 一台声控机子,有两条命令:— “repeat the last word”, “delete the last symbol”.给你一些单词,让你用合理运用这两条命令,最少的敲击键盘打出这些单词。 思路: 很简单的一道贪心,排序+比较即可。 代码如下:#include <iostream>#include <cstdio>#include <cstring>#include <原创 2016-03-05 12:22:00 · 342 阅读 · 0 评论 -
uva714 - Copying Books
题意: 给你一组数据,如:100 200 300 400 500 600 700 800 900,让你按序分成m组,使得每组的最大总和最小。 即:100 200 300 400 500 / 600 700 / 800 900 (注意每组至少要有一个数据,即100 100 100 100 100,m=4 不能分成 : / 100 100 /100 100 / 100 )思路: 刚开始没原创 2016-03-05 12:17:23 · 241 阅读 · 0 评论 -
uva12124-Assemble
题意:有b块钱,n个配件及其种类,质量,价格,让你每种类型的配件各买一个,总价不超过b元,让品质最差的配件质量最好,求最小品质的质量最大值思路:二分最小质量的最大值,再用贪心的思想判断该质量是否可行,即排序每种配件的价格,判断时按价格从低到高扫描,选择到符合该质量的即可。代码:#include #include #include using names原创 2016-02-02 12:45:55 · 340 阅读 · 0 评论 -
uva11636 - Hello World!
题意: 通过复制粘贴打印”helloWord“,问要打印n个”helloWord“,至少要粘贴几次。 思路: 想了下感觉跟求树的深度差不多,写了几行代码果然AC 代码如下:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace原创 2016-02-13 13:02:18 · 369 阅读 · 0 评论 -
UVA11729 - Commando War (贪心)
题意:n个任务,需要交代B分钟,执行J分钟,让你合理选择交代任务的次序,求得n个任务完成的最小总时长思路:为保证总时长最小,执行时长较大的应该先执行,所以每个按执行时长由大到小排序求得总时长。代码:#include #include #include #include using namespace std;struct solder{ int b, j原创 2016-01-24 12:34:46 · 932 阅读 · 0 评论 -
uva10026 - Shoemaker's Problem
题意: 鞋匠要完成一些任务,给你任务的完成时间t和惩罚s,让你求出怎样安排这些任务可以使惩罚更小。 思路: 贪心,感觉跟可拆背包的想法差不多,贪心决策是根据每个任务的s/t从大到小排序 代码如下:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;c原创 2016-02-28 22:38:42 · 321 阅读 · 0 评论