摘要: 匈牙利算法其实就是一种递归,是由匈牙利数学家提出,该算法的核心就是寻找增广路经,它是一种用增广路径求二分图最大匹配的算法。 其时间复杂度为O(v*e),v为左边的个数,e为右边的个数。 这是一个二分图,现在求这个图的最大匹配。 (1) 最开始的匹配会得到 1->A; 2->B; (2) 当对3进行匹 阅读全文
posted @ 2017-07-15 10:48 ouyang_wsgwz 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 对于字符串首先第一反应所需的头文件就是 #include <cstring> 或者写成( #include <string.h>) 在这个头文件下呢,有几个常用的函数: 1. strlen(s) //可见字符的个数 答案: 2. strcmp(a,b) //比较函数(当a>b时,结果等于1;当a<b 阅读全文
posted @ 2017-06-11 17:22 ouyang_wsgwz 阅读(589) 评论(0) 推荐(0) 编辑
摘要: 在最初的C语言中,原版的输入就是scanf("<格式化字符串>",<地址表>) ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存访问越界,例如分配了5字节的空间但是读入了10字节 char buf[5]={'\0'}; scanf("%s 阅读全文
posted @ 2017-05-27 11:09 ouyang_wsgwz 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 问题大意: 1.有n个信封,同样有n封信; 2.这n个信都装错信封; 输出: 总共有多少种错排的方式; 题解: n个人的排列数是n的阶乘n!,随机选取m个人作为拿到自己礼物的一组,有Cnm种方法,假设用D(n-m)表示剩下的n-m个人全部拿错的方法数,那么答案就是: D(n) = (n-1) [D( 阅读全文
posted @ 2017-05-26 19:20 ouyang_wsgwz 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 快速幂取模 用法:用于求解 a 的 b 次方,而b是一个非常大的数,用O(n)的复杂度会超时。但是这个算法的时间复杂度是O(log n). 那么假如让你求一个矩阵的很大的次方幂呢,当然我们同样可以求解。 可以参考dalao的博客: http://blog.csdn.net/y990041769/ar 阅读全文
posted @ 2017-05-19 19:18 ouyang_wsgwz 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 判断素数的方法很简单: 然而有很多数的时候 ,很显然,如果从头选到尾,是非常耗费时间的。 所以用这个方法写的时候就显出了优势,就是省时。 先从小到大排序,把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为 阅读全文
posted @ 2017-05-10 20:59 ouyang_wsgwz 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 对于双向队列,与队列queue以及vector容器的区别就在于,名字不同,也就是它是双向的,可以从头开始操作,也可以从末尾开始操作。 双向队列的常用方法跟队列queue差不多: 头文件: #include<deque> 函数: 构造/析构 deque<int>q 构造一个空的双向队列 deque<i 阅读全文
posted @ 2017-05-06 21:32 ouyang_wsgwz 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 完全背包问题很简单,相对于01背包只有一点点的变化。 1.有n种不同的物体,有体积为m的一个背包; 2.n种物体分别有自己的体积v,价值c; (注意是“n种“,不是"n个”,所以每种物体不限个数,随便放多少) 输出: 背包中能装下的最大价值 题解: 首先将这n种物体的体积和价值存在两个不同的数组中( 阅读全文
posted @ 2017-05-05 21:13 ouyang_wsgwz 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 01背包是动态规划中,最基础也是经典的一个算法之一。 经典题意: 1.有n个不同的物体,有体积为m的一个背包; 2.n个物体分别有自己的体积v,价值c; 输出: 在背包中能装的最大价值 题解: 首先将这n个物体的体积和价值存在两个不同的数组中(v[i],表示第i个物体的体积,c[i]表示第i个物体的 阅读全文
posted @ 2017-05-01 21:13 ouyang_wsgwz 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 同样威佐夫也有一个经典的例题: 1.有两堆数量分别为 n,m个石子的石子堆; 2.两个人轮流取石子,可以在一堆石子中取任意个,或者,在两堆石子中每堆石子取相同数目的石子; 输出: 如果先手赢,输出1,否则输出0。 题解: 首先,当n=0,m=0时,先手输。 n=1,m=1时,先手赢。 n=2,m=1 阅读全文
posted @ 2017-05-01 14:16 ouyang_wsgwz 阅读(245) 评论(0) 推荐(0) 编辑