分类: 算法基础

6 篇文章

常用类之
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。   一、map的说明    1   头文件   #include   <…
常用类之
  vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:#in…
常用类之
要想使用标准C++中string类,必须要包含#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件using  std::string;using  std::wstring;或using namespace std;下面你就可以…
滚动数组
dp中经常卡内存,而利用滚动数组可以大大节省内存空间。 滚动数组的作用在于优化空间,主要应用在递推或动态规划中。因为DP题目是一个自底向上的扩展过程,我们常常需要用到的是连续的解,前面的解往往可以舍去。所以用滚动数组优化是很有效的。利用滚动数组的话在N很大的情况下可以达到压缩存储的作用。 一个简单的例子: 斐波那契数列: 一般代码: #includ…
筛法求素数
素数总是一个比较常涉及到的内容,掌握求素数的方法是一项基本功。 基本原则就是题目如果只需要判断少量数字是否为素数,直接枚举因子2 。。N^(0.5) ,看看能否整除N。 如果需要判断的次数较多,则用下面介绍的办法预处理。 void make_prime() { memset(prime, 1, sizeof(prime)); prime[0]=fa…
欧几里德算法(求最大公约数)
欧几里德算法也就是辗转相除法,有着2000年的历史了。欧几里德算法依据的算法理论是一个定理:gcd(a,b) = gcd(b,a mod b)。 实现源码为: //递归实现 int gcd(int m, int n) { if (m < n) { int tem = m; m = n; n = tem; } if (n == 0) return m…