- 博客(8)
- 资源 (1)
- 收藏
- 关注
原创 最小生成树Prim与Kruskal算法的比较
最小生成树是图论问题中很基本的一个操作。常用的算法有Prim和Kruskal两种算法。本文对这两种算法稍作区别与讨论。Prim算法是依赖于点的算法。它的基本原理是从当前点寻找一个离自己(集合)最近的点然后把这个点拉到自己家来(距离设为0),同时输出一条边,并且刷新到其他点的路径长度。俗称,刷表。 根据Prim算法的特性可以得知,它很适合于点密集的图。通常在教材中,对Prim算法进行介绍的标程都采用
2016-09-19 21:48:50 14660 1
原创 0-1背包的维度拓展
引言 0-1背包是经典的动态规划背包问题之一,也是多数背包问题的基础。0-1背包标准版本(完全表达)需要两个维度,一个表示物品i,一个表示代价j。优化后,可省去物品维度。那么,如果有两种代价又该如何呢?于是,我们将0-1背包拓展一个维度来进行讨论。核心讲解 取材于现实生活中,你要寄快递,快递对体积和重量均有限制。再比如,常见的军火运输问题,等等。从背包问题的原理来看,我们只需开两个代价维度就可以
2016-09-17 15:30:42 457
原创 【挫纪】多重背包问题的优化细节
众所周知多重背包问题的一个重要优化:二进制分解。 然而在二进制分解时,有细节需要注意。一、分解顺序问题 有时候脑子抽筋,会突然用位运算移位来直接获取分解结果。这种方法是不可取的,例如5=101,按照移位分解的方法就会分解为4+1,而事实上我们要分解成1+2+2二、分解后的冗余运算 分解之后会留下剩余的部分,对于剩余的部分,必须要一次性清除,万不可一次次处理,这样时间复杂度会很高。三、边分解边运
2016-09-16 16:07:50 437
原创 逆序对在OI中实际问题里的细节处理
之前写过一篇关于逆序对的描述文章: http://blog.csdn.net/mollnn/article/details/52503183 如果需要了解与逆序对有关的信息,见上文。本文主要交代,在OI中使用逆序对算法需要注意的细节:判断问题是否确实适合使用逆序对(废话)排序要求是升序还是降序排序要求中遇到等号怎样处理因为逆序对ANS通常很大,所以注意是否要开long long?对应的如
2016-09-16 14:27:13 420
原创 归并排序与逆序对
归并排序是一种运用了二分算法的排序,其基本原理可以理解为拆分对合并。利用归并排序可以便捷地求出逆序对的个数。参考代码如下所示:#include <iostream>#include <cstring>#include <cmath>using namespace std;int n,a[100000],x[100000],ans=0;void msort(int l,int r){
2016-09-11 11:50:50 481
原创 二分算法基础 第一章 简单二分
二分算法是一种效率极高的算法(思想),在很多的实例中都得以运用,比如快排和归并排序。本文将对二分算法的一些基础内容以及使用进行讨论。入门-二分查找 我们先来看一个二分查找的例子。(p2searching.cpp)#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>
2016-09-10 16:31:18 666
原创 快速幂算法基础
快速幂算法主要应用于求幂模的问题。 我们可以先定义一个问题: 如何求2^31的最后一位数?显而易见,结果当然是8.这个问题是具有特殊性的,可以用某些特殊解法来处理。但是作为我们对快速幂的学习例程来看,我们需要从特殊问题中寻找一般算法。 对于这个问题,最脑残的算法是:#include <iostream>#include <cstdio>#include <cmath>using name
2016-09-10 16:28:19 477
原创 C++STL中String类的分析与运用
[Mollnn.Fan原创,转载请注明出处] 本来以为有了String类,所有的字符串操作都变得非常简单。然后,在某次实际测试中反应出了很大的问题。原本只涉及到区区一个replace,在有参考资料的状态下10分钟轻松解决的问题,只因为忘记了replace函数的原型,导致了问题的复杂化。说实话,对于MFC的CString我或许更加熟悉,但应付竞赛需要,现在开始改掉用MFC的习惯。 在那道替换问题中
2016-09-06 12:55:44 467
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人