摘要:
选择尽量少的区间覆盖一条指定的线段[S,T] 在开始的时候把所有区间[S,T]之外的部分切掉 然后将区间按照左端点从小到大排序,如果第一个区间的起点不是S则无解 之后的实现逻辑建议采用本文介绍的这样,否则可能会因为性能差异而T掉 我们记录一个当前延伸的最右位置,初值为S 接下来按顺序考虑每个区间,将 阅读全文
摘要:
为啥把这两个问题放在一起?因为这两个问题可以用同样的程序来实现!! 请注意刘汝佳算法竞赛入门经典在进行区间选点问题的讨论时,有一句话没有任何意义:b相同时a从大到小排序 因为排不排结果没有任何区别 程序实现的思路是把所有的边按照右端点从小到大排序 设置一个tmp初值为极小值,然后考虑每一条边,每次都 阅读全文
摘要:
这个问题比部分背包问题还简单,先拿轻的再拿重的可以保证最后物品装的最多。代码如下: 阅读全文
摘要:
每个物品都可以拿走一部分,要在不超重的情况下总价值最高,这应该是最简单的一类贪心问题了,思路很明显,考虑性价比即可,安装性价比排序,从高到低开始拿,除了最后一个物品之外,要么不拿,要么拿走全部,具体实现如下。请注意结果的细节,对最后一个物品的处理。 阅读全文
摘要:
该算法由Bellman-Ford算法演变过来,首先介绍一下Bellman-Ford算法 最短路最多经过n-1个点,可以用n-1轮松弛操作来得到 当然这个算法我没有实际应用过,而是一直在用它的优化算法,利用队列代替前面的循环检查 SPFA最坏时间复杂度仍然为O(nm),但是有人分析其时间复杂度为O(k 阅读全文
摘要:
Kruskal算法核心是加边,先把所有边按照权值从小到大排序,然后在剩下的所有没有被选过的边中,找到最小的边,如果和已经选取的边构成回路则放弃,选取次小边,直到选取了n-1条边为止,这样所有点就都连通了。 每次从边集中选取的权值最小的边的两个顶点如果属于不同的树,就把他们合并(把这条边加入子图),反 阅读全文