算法
文章平均质量分 50
sunmenggmail
这个作者很懒,什么都没留下…
展开
-
poj1276
#include #include #include #include using namespace std;int dp[100001];int cash,N;struct money{ int num; int value;};money moneys[10];int main(){ while (scanf("%d%d",&cash,&N)!=EOF)原创 2012-02-29 19:43:08 · 777 阅读 · 0 评论 -
poj3211
这是我的代码,一直是wa#include #include #include #include #include #include #include #include #include using namespace std;int colors;int clothes;int dp[100002];map > index;原创 2012-03-01 08:57:24 · 651 阅读 · 0 评论 -
图论的一些资料
邻接表的表示:http://yzmduncan.iteye.com/blog/883903tarjan算法http://www.byvoid.com/blog/scc-tarjan/转载 2012-03-05 14:19:19 · 789 阅读 · 0 评论 -
poj1273 最大流
用的是EdmondsKarp程序可以再优化的,懒得优化了EdmondsKarp#include #include#include #include #include using namespace std;const int maxNode = 202;int N = 201;//edgeint M = 201;//nodeconst int maxInt原创 2012-03-25 11:25:21 · 560 阅读 · 0 评论 -
算法分类
要坚持一个一个的学习图论 拓扑排序 有向无环图与动态规划的关系 二分图匹配问题 一般图问题与二分图问题的转换思路 最大匹配 有向图的最小路径覆盖 0 / 1矩阵的最小覆盖原创 2012-03-25 13:26:48 · 796 阅读 · 0 评论 -
二分图匈牙利算法
转自大牛...http://www.matrix67.com/blog/archives/39http://www.matrix67.com/blog/archives/116转载 2012-03-25 13:44:24 · 523 阅读 · 0 评论 -
poj1274 最大二分匹配
#include#includeusing namespace std;const int MAXN = 1000; int uN, vN; // u, v数目,要初始化!!! bool g[MAXN][MAXN]; // g[i][j] 表示xi与yj相连 int xM[MAXN], yM[MAXN]; // xM[i]:cow i已经被分配到stal原创 2012-03-25 18:57:49 · 620 阅读 · 0 评论 -
bellman-ford
转自:http://hi.baidu.com/jzlikewei/blog/item/94db7950f96f995a1038c2cd.htmlBellman-Ford算法与另一个非常著名的Dijkstra算法一样,用于求解单源点最短路径问题。Bellman-ford算法除了可求解边权均非负的问题外,还可以解决存在负权边的问题(意义是什么,好好思考),而Dijkstra算法只能处理边权非负的问转载 2012-03-25 20:41:00 · 1038 阅读 · 0 评论 -
最小费用流
#include #include #define maxn 61#define maxv (maxn*maxn*2 + 1)#define maxe (maxv*5)#define oo 2147483647#define min(a,b) ((a>(b)?(b):(a)))#define maxq maxeusing namespace std;struct edge_t原创 2012-03-25 22:20:23 · 532 阅读 · 0 评论 -
第一次面试--腾讯
主要是思维的缜密性,灵活性和全面性,一定要冷静算法都不是很难的,都是最基本的,但一定要正确的写出来,一定要考虑边界值1. python的基本操作,切片,词典,汉字处理,最基本的操作应该要会2. 大规模数据处理,文件A和文件B,找出相同的行,可以用hash散列3. 有序数组A ,有序数组B,元素都是int,找出两个集合的差集:就是为A,B设置个指针,然后每次将较小的数组放入,原创 2012-03-28 09:14:02 · 955 阅读 · 0 评论 -
最小费用最大流
最小费用最大流就是指网络最大流的集合中找出最小费用的那个最大流。其基本思想是从某个可行流F出发,找到关于这个流的一个可改进路经P,然后沿着P调整F,对新的可行流试图寻找关于他的可改进路经,如此反复直至求得最大流。现在要找最小费用的最大流,可以证明,若F是流量为V(F)的流中费用最小者,而P是关于F的所有可改进路中费用最小的可改进路,则沿着P去调整F,得到的可行流F'一定是流量为V(F')的所有原创 2012-03-31 00:01:17 · 759 阅读 · 0 评论 -
hdu 2544 dijkstra
链接矩阵+优先队列#include #include #include #include #include #include using namespace std;const int maxNodes = 102;int g[maxNodes][maxNodes];int pre[maxNodes];int cost[maxNodes];int maxInt =原创 2012-03-31 21:08:19 · 669 阅读 · 0 评论 -
并查集 poj1182
#include #include using namespace std;const int maxNodes = 50010;int father[maxNodes];int rank[maxNodes];//此处rank的意义不一样//此题最后所有的点都属于一个类int N,K,c;void init(){ for (int i=1;i<=N;++i) {原创 2012-04-04 15:28:38 · 450 阅读 · 0 评论 -
斐波那契堆
今天看斐波那契堆看的头昏脑胀,原因是书上写的太乱了。。。看到网友写的就很不错http://mindlee.net/2011/09/29/fibonacci-heaps/由于增加了删除和关键字减值操作,所以,F堆中的最小树就不一定必须是二项树了。事实上,可能存在度为k却只有k + 1(原书是k + 1,应该是k – 1吧)个结点的最小树。为了保证每个度为k的最小树至少包含ck原创 2012-04-11 22:32:53 · 1663 阅读 · 0 评论 -
memcpy
void *Mymemcpy(void * pDest,const void *pSrc,unsigned int size){ assert(pDest!=NULL && pSrc!=NULL); unsigned char *tmpD = (unsigned char*)pDest; unsigned char *tmpS = (unsigned char*)pSrc; int i=原创 2012-04-24 15:11:03 · 485 阅读 · 0 评论 -
斐波那契堆
以下是实现的程序肯定可以再优化的。。//#include #include #include #include using namespace std;class Node{public: int m_key; Node *m_parent; Node *m_left; Node *m_right; Node *m_child;//只要指向一个孩子结点 i原创 2012-04-13 16:57:33 · 1058 阅读 · 0 评论 -
大数运算
#include #include #include #include#include using namespace std;const int MaxShort = 100;//最多有MaxShort * 2个字节//如果要表示64位int,MaxShort = 4const int baseNum = pow(2.0,16.0); const int Shift = 16原创 2012-04-25 08:08:10 · 500 阅读 · 0 评论 -
判断某棵二叉树是否二叉排序树
这是我首先想到的算法:bool Judge(PBinTree pbt){ PBinTreeNode pLeft, pRight; bool bLeft = false, bRight=false, bRootl=false, bRootr=false; if(pbt == NULL) return true; // 判断原创 2012-04-25 12:22:17 · 1281 阅读 · 0 评论 -
线性表
线性表有两种表示方式: 1.顺序表,可以看做数组 2.链表原创 2012-04-14 16:44:55 · 576 阅读 · 0 评论 -
打印二叉树的所有路径
http://blog.csdn.net/randyjiawenjie/article/details/6772145看看思路,下面的小bug还比较多二叉树的常见问题有如下几个,如果解决好了,就跟链表一样轻松:唯一不一样的是,二叉树是非线性结构。常见的问题如下:二叉树的问题1.二叉树三种周游(traversal)方式:[cpp] vi转载 2012-04-16 17:40:04 · 18814 阅读 · 4 评论 -
avl树
看到一篇很透彻的文章:http://dongxicheng.org/structure/avl/应该还是学长1. 概述AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。AVL树种查找、插入和删除在平均和最坏情况下都是O(log转载 2012-04-16 22:41:47 · 690 阅读 · 0 评论 -
二叉树相关题目
//判定二叉树是不是平衡二叉树//网上的版本要不断的重复计算//返回-1,以x为头的子树不是平衡二叉树//否则返回值是 子树的深度int BalantTree(Node *x){ if(x ==NULL) return 0; int right = BalantTree(x.right); int left = BalantTree(x.left); if(right<0原创 2012-04-16 14:26:26 · 729 阅读 · 0 评论 -
二叉树两个节点的公共节点
转自:http://blog.csdn.net/hhygcy/article/details/4660362很流行的一个问题,常见于各种面试中,http://fayaa.com/tiku/view/16/ 这里有一个很好的汇总.找寻二叉树中两个节点的公共父节点中最近的那个节点情况1. 节点只有left/right,没有parent转载 2012-04-16 15:13:52 · 926 阅读 · 0 评论 -
单链表的交叉点
比较容易http://hi.baidu.com/iwitggwg/blog/item/7f6d54197c85a44e43a9ade2.html原创 2012-04-16 15:28:11 · 620 阅读 · 0 评论 -
判断整数序列是不是二叉查找树的后序遍历结果
转自:http://blog.csdn.net/tianshuai11/article/details/7068755判断整数序列是不是二叉查找树的后序遍历结果题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。 如果是返回true,否则返回false。例如:输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序转载 2012-04-16 17:14:23 · 1108 阅读 · 0 评论 -
二叉树的基本操作
转自:http://blog.csdn.net/randyjiawenjie/article/details/6329712void insert(tNode root,int data) { tNode newNode = (tNode)malloc(sizeof(treeNode)); newNode->data = data; newNod转载 2012-04-16 18:46:51 · 977 阅读 · 0 评论 -
二叉树和为某种所有路径
题目:输入一个整数和一棵二元树。打印出和与输入整数相等的所有路径,从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。分析:这道题考查对二叉树遍历方式的理解,采用后序遍历,如果把二叉树看成图,就是图的深度遍历。使用变量存放当前遍历的路径和,当访问到某一结点时,把该结点添加到路径上,并累加当前结点的值。如果当前结点为叶结点并且当前路径的和刚好等于输入的整数,则当前的路径符合要求转载 2012-04-16 16:30:35 · 605 阅读 · 0 评论 -
保存网站
电脑又卡了,先保存网址以:http://zhedahht.blog.163.com/blog/static/254111742007127104759245/http://blog.csdn.net/v_JULY_v?utm_source=weibolife为主线http://topic.csdn.net/t/20061008/22/5068262.html原创 2012-04-27 23:44:19 · 709 阅读 · 0 评论 -
排序稳定性
转自:http://blog.csdn.net/fisher_jiang/article/details/3137991这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者转载 2012-05-02 16:27:04 · 891 阅读 · 0 评论 -
四叉树和八叉树
前序四叉树或四元树也被称为Q树(Q-Tree)。四叉树广泛应用于图像处理、空间数据索引、2D中的快速碰撞检测、存储稀疏数据等,而八叉树(Octree)主要应用于3D图形处理。对游戏编程,这会很有用。本文着重于对四叉树与八叉树的原理与结构的介绍,帮助您在脑海中建立四叉树与八叉树的基本思想。本文并不对这两种数据结构同时进行详解,而只对四叉树进行详解,因为八叉树的建立可由四叉树的建立推得。若有不转载 2012-05-01 17:21:45 · 1231 阅读 · 0 评论 -
大数运算--除法
#include #include #include #include#include using namespace std;//大数运算最关键的是用进制理解,就是把一个数组元素表示的最大值作为一个进制;如此,最容易的大数运算也是最耗费空间的就是一个元素表示一位数字,即用十进制表示;还有一种折中的方案,是一个元素最大能表示9999,如此用的是10000进制,则下面的baseNum原创 2012-05-03 18:27:23 · 12901 阅读 · 3 评论 -
找到的比较好的工作面试题笔试题
有空要看看,开了十几个chrome标签,电脑卡死了,要重启,先记录下网址http://s.sousb.com/category/%E6%B5%B7%E9%87%8F%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86/http://fayaa.com/tiku/view/183/http://blog.csdn.net/hhygcy/article/deta转载 2012-04-19 22:13:18 · 566 阅读 · 0 评论 -
strcmp
想不到可以如此简洁明了int strcmp(const char *s1,const char *s2){for(;*s1 == *s2;++s1,++s2)if(*s1 == '\0') return 0; return ((*(unsigned char *)s1 >*(unsigned char *)s原创 2012-05-04 20:45:29 · 426 阅读 · 0 评论 -
统计二进制1个数
1. 循环移位要注意x>>1并不改变x的值,要x >>=12.删除最右端的1(对于稀疏1)x = x&(x-1) (譬如,0110,经过上式运算变为0100)同理,x &=(x+1)删除最右边的0 3. 查表static int bits_in_char [256] = { 0, 1, 1, 2, 1, 2, 2, 3,原创 2012-05-07 10:07:50 · 789 阅读 · 0 评论 -
学习笔记
1. 不能囫囵吞枣,要理解2. 知识点要不断的复习,回想3. 要开始看一些专门的笔试面试题4. 思维一定要灵活,不能僵硬原创 2012-05-06 15:40:45 · 446 阅读 · 0 评论 -
图的邻接表表示
第一种:#include #include #include #include #include using namespace std;const int numNodes = 10;typedef struct node//这个点j就是表示一个点i的邻接点,adj表示这个点j的位置,next指向点i的下一个邻接点,i--->j{ int adj;// s原创 2012-03-31 23:08:33 · 666 阅读 · 0 评论 -
兄弟单词
如何找出字典中的兄弟单词给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有多少个兄弟单词?首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd,good的key为dg转载 2012-05-06 16:08:08 · 3140 阅读 · 0 评论 -
概率相关题目
1,如何生成概率主要参考大牛的博客:http://www.cnblogs.com/miloyip/archive/2010/04/21/1717109.html问题定义游戏(和一些模拟程序)经常需要使用随机数,去应付不同的游戏(或商业)逻辑。本文分析一个常见问题:有N类物件,设第i类物件的出现概率为P(X=i),如何产生这样的随机变量X?例如对概率的要求是原创 2012-05-06 17:22:45 · 1224 阅读 · 0 评论 -
线性时间查找固定频率的元素
转自:http://blog.ibread.net/467/linear-time-iceberg-query-algorithm/一、从面试题开始在进入到枯燥的正文之前,先来看一道据说在很多面试过程中都会问到的题目:已知一个长度为n的数组,求出现半数以上的元素。这道题目看似简单,其实得到完美的答案并不容易。首先,不难想到,出现半数以上的元素最多只有一个。而为了转载 2012-05-07 09:01:44 · 2403 阅读 · 0 评论 -
原地归并排序
转自:http://www.cppblog.com/converse/archive/2008/09/28/63008.html原地归并算法归并排序算法(mergesort)是将一个序列划分为同样大小的两个子序列,然后对两个子序列分别进行排序,最后进行合并操作,将两个子序列合成有序的序列.在合成的过程中,一般的实现都需要开辟一块与原序列大小相同的空间,以进行合并操作,归并排序算转载 2012-05-06 22:19:33 · 1496 阅读 · 0 评论