一、基本概念:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性...
分类:
编程语言 时间:
2015-02-05 12:49:21
阅读次数:
255
HDU2037:链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037题解: 贪心算法:在对问题求解时,总是作出在当前看来是最好的选择。也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明)。若要用贪心算法求解某...
分类:
其他好文 时间:
2015-02-05 00:41:55
阅读次数:
241
这题用的是贪心算法,不过在贪心之前还是要进行部分处理的。
首先就是题目要求B/P尽可能的大,所以P应该尽可能的小,B应该尽可能的大。但是B和P的处理方式是不一样的,B是所有带宽中最小的那一个,P是所有设备的总价钱,所以我能想到一个方法就是一个一个的枚举B,本来我是不敢这样想的,可是题目给的时间比较长,我觉得应该问题不大,当我运行之后,竟然只是0ms,让我吃了一惊。然后再选择设备,这时候就要用到贪...
分类:
其他好文 时间:
2015-02-04 09:31:34
阅读次数:
160
这题我用的是贪心算法,我的理解是这样的:
要求我最少能赢的次数,就是求别人最多能赢的次数。首先把我的牌先升序排序,然后我从小开始出,对于我出的牌,别人应该尽可能的压,而且用他们比我大的最小的那张牌;如果他们不压,那么他们后面这张牌就很有可能用不上,就少赢一次。
#include
#include
#include
#include
#include
#include
using namespa...
分类:
其他好文 时间:
2015-02-03 23:05:04
阅读次数:
163
这题用的是贪心算法来算的,贪心策略如下:
dist数组表示各个牛的位置距第一个牛的距离,当然之前要对牛的位置进行升序排序。
设a为第一头牛距各头牛的距离的总和,然后从第二头牛开始遍历,假设遍历到第i头牛时,那么标准为:
t=t-(n-i)*d+i*d,
各变量的含义为:t一开始为a,然后每次就是该表达式运算之后的值;
n为牛的总数;
d为第i头牛和第i-1头牛之间的距离。这个公式画图其...
分类:
其他好文 时间:
2015-02-02 23:09:57
阅读次数:
153
这题就是贪心算法,先对length升序排列,如果length相等,再按weight升序排列;反之亦可。然后根据题目要求进行选择即可。
不过我在写排序函数的时候出了一点问题,害得我还一度以为我的贪心策略是错的。
#include
#include
#include
#include
#include
#include
using namespace std;
const int N=5005;
...
分类:
其他好文 时间:
2015-02-02 21:31:16
阅读次数:
124
概述
讨论赫夫曼编码问题,赫夫曼编码的思想就是变长编码。变长编码就是让字符表中出现概率高的字符的编码长度尽可能小,而出现概率高的字符的编码长度相对较长。然后还要遵循前缀码的要求,就是任意一个编码都不是其他编码的前缀码,这样方便解码。
对于...
分类:
编程语言 时间:
2015-02-01 17:51:44
阅读次数:
257
Prim 算法是一种解决最小生成树问题(Minimum Spanning Tree)的算法。和 Kruskal 算法类似,Prim 算法的设计也是基于贪心算法(Greedy algorithm)。Prim 算法的思想很简单,一棵生成树必须连接所有的顶点,而要保持最小权重则每次选择邻接的边时要选择较小...
分类:
编程语言 时间:
2015-01-31 10:34:32
阅读次数:
299
0-1背包问题描述:
已知:小偷在店里偷东西,小偷只带了一个最大承重为W的背包,商店里有N件商品,第i件商品的重量是weight[i],价钱是value[i]。
限制:每种商品只有一件,可以选择拿或者不拿,不能分割,不能只拿一件商品的一部分(所以叫做0-1,0即不拿,1则整个拿走,且一种商品有且只有一件可供拿走)
问题:在不超过背包最大承重的情况下,最多能拿走多少钱的商品...
分类:
编程语言 时间:
2015-01-30 22:43:45
阅读次数:
296
上一篇讲了贪心算法来解活动选择问题(【算法导论】贪心算法之活动选择问题),发现后面有一道练习16.1-1是要用动态规划来解活动选择问题。其实跟之前的矩阵链乘法有些相似,也是考虑分割的活动是哪一个,并用二维数据来记录Sij---最大兼容集合个数,和用另一个二维数据来记录Sij取得最大时的活动分割点k。然后就是考虑边界问题,和使用递归来求动态规划的最优解。
#i...
分类:
编程语言 时间:
2015-01-28 22:36:17
阅读次数:
408