贪心算法
Jaster_wisdom
程序员
展开
-
POJ 1042
题意:John去钓鱼,在一个单向的很多条湖的路边钓鱼,每条湖每5分钟能钓到的鱼的数量随着时间减少,每条湖之间的行走时间也是不同的,但是固定不变。问的是,给出总的时间h小时,编写算法,求出能钓到最多的鱼的解决方案。输入:湖的数量,给定的总时间,每条湖头5分钟能钓到的数量,每条湖钓鱼的衰减速率,每两条湖之间的行走时间输出:每条湖上 钓鱼的时间,以及最大的钓鱼的数量分析:枚举算法原创 2016-02-14 22:09:52 · 518 阅读 · 0 评论 -
奇数变成最大的偶数
题目:给定一个奇数,交换两个数的位置,使它变成最大的偶数解析:将奇数的个位数 与 它之前的所有偶数比较,碰到比它小的数替换即可。 如果个位数比所有偶数都小,则把它与 最低位的偶数交换。#includeusing namespace std;void swap(int &a,int &b){ int tem原创 2016-02-01 20:42:09 · 1202 阅读 · 0 评论 -
POJ 1065
题目大意:给定一些木棍的数量,它们的长度以及重量,求出最少可以将这些木棍排成几列,每列的木棍的长度和重量呈非递减排列。分析:首先,将这些木棍 按它们的 长度从小到大排列,如果后面的len和weight都比cl,cw大的话,就将flag置为1,表示它已经排过了,并且更新cl,cw. 然后从头开始搜索,第一个flag为0,即没有安排的木棍,将它作为第二列的开始,直到将所有的木棍排完即可。原创 2016-03-03 16:38:31 · 515 阅读 · 0 评论 -
POJ 1521
这道题题目有点长,看了之后 发现时 哈夫曼编码问题,对给定对字符串中的每一个字母编码,使得整个编码序列最短。因为这道题最后只要求编码的长度,所以用优先队列就 可以解决。这里注意一下,优先队列的声明格式:/priority_queue 对于基本类型的使用方法相对简单。他的模板声明带有三个参数://priority_queue//其中Type 为数据类型, Container 为保原创 2016-03-04 16:42:14 · 818 阅读 · 1 评论 -
POJ 1088
看完该题,第一个想法是,找到 数组中 最大的数,然后在其周围找一个仅次于它大小的数,然后这样循环下去,不过这样好像比较麻烦。当某点上下左右四个点 都是一样大时,需要保留四个方向的值。后来采用 动态规划+递归,用len[i][j] 表示从(i,j)点开始的最大深度,动态转移方程: len[i][j] = max(len[i-1][j],len[i+1][j],len[i][j-1],len[i]原创 2016-03-19 10:24:14 · 687 阅读 · 0 评论 -
POJ 2709
又是一道贪心算法的例子题目大意,我读了好久才读懂。 每套墨水组合都有50ml的液体,需要配置 要求的几种颜色,除了灰色以外的颜色需要三种颜色同时混合以外,其他颜色都有提供。思路:首先,看普通颜色需要最多的那一种 需要多少套。然后购买这些套,看看还剩余多少颜料可以配灰色。配灰色的话, 首先将剩余的颜料 从大到小 排列,取前三种配1ml灰色,直到灰色全部配完,如果不够的话,再购买一套颜料。原创 2016-03-09 11:44:18 · 768 阅读 · 0 评论 -
磁盘调度算法剖析(FIFO、SSTF、SCAN、CSCAN、FSCAN)
常见的磁盘调度算法有以下几种:1.FIFO:先来先服务算法;2.SSTF: 最短寻道时间算法;3.SCAN:电梯调度算法;(这样命名很形象)4.CSCAN: 循环扫描算法5.FSCAN:分步电梯调度算法(分两个队列)下面详细说一下各个算法的主要思想:首先是FIFO算法,也就是先来先服务算法。这种算法的思想比较容易理解。假设当前磁道在某一位置,依次处理服务队列里的每一个磁道,这样做的优点是处理起来比...原创 2016-08-28 14:52:48 · 92496 阅读 · 32 评论 -
LeetCode55. 跳跃游戏
题目大意:判断是否可以从数组的第一个位置调到最后一个位置,每次跳得步数必须小于等于当前位置上的值题目分析:使用贪心算法,每次选择最远能达到的地方,假设从某一点最远可以到达A点,那么A点之前的所有点都是可以到达的。所以我们只要不断的更新最远可达到的点,然后看是否最远的点超过了终点即可。具体来说,就是根据A点之前所有的点加上其最远的距离,求它们的一个最大值,求到一个reach之后,迭代地求最大值即可。...原创 2018-06-14 19:48:20 · 724 阅读 · 0 评论