2010年4月22日

并查集总结

摘要: 并查集的基本操作:合并两个不相交的集合,查找某个元素所在的集合。[代码]//查找(压缩路径)int Find(int x){ if(x != p[x]) { p[x] = Find(p[x]); } return p[x];}//合并(加权规则)void Union(int x , int y){ int a , b; a = Find(x); b = Find(y); if(a == b) re... 阅读全文

posted @ 2010-04-22 19:02 DiaoCow 阅读(592) 评论(0) 推荐(0) 编辑

2010年4月19日

字典树

摘要: 今天看了字典树原理,顺便AC了几个简单的题目,做一下总结。(字典树)字典树的基本功能是用来查询某个单词(前缀)在所有单词中出现次数的一种数据结构,它的插入和查询复杂度都为O(len),Len为单词(前缀)长度,但是它的空间复杂度却非常高,如果字符集是26个字母,那每个节点的度就有26个,典型的以空间换时间结构。字典树基本模板:代码1.统计难题(这里都用数组分配结点,用malloc分配太慢了)这题就... 阅读全文

posted @ 2010-04-19 13:58 DiaoCow 阅读(10927) 评论(0) 推荐(4) 编辑

2010年4月18日

动态规划“数塔”类型题目总结

摘要: 前几天做了好几个DP题目,感觉都是一个类型的,因此有必要总结一下。数塔问题 :要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?分析:站在位置9,我们可以选择沿12方向移动,也可以选择沿着15方向移动,现在我们假设“已经求的”沿12方向的最大值x和沿15方向的最大值y,那么站在9的最大值必然是:Max(x,y) + 9。因此不难得出,对于任意... 阅读全文

posted @ 2010-04-18 18:42 DiaoCow 阅读(5209) 评论(0) 推荐(0) 编辑

2010年4月17日

字符串处理的两个问题:删除指定字符,删除相邻相同的字符

摘要: 1.删除指定字符这是《The C programming language》中的一个例子,写的很巧妙(比我自己当时想的好多了),原地删除,没有多用额外的存储空间。[代码]2.删除相邻相同的字符 (如: abbc -> ac abccbdeffeg -> adg)还是利用squeeze()函数中的技巧,我们可以这样写:[代码]  //c为当前也许要插入的字符 c = s[0]; len ... 阅读全文

posted @ 2010-04-17 20:25 DiaoCow 阅读(1137) 评论(0) 推荐(0) 编辑

0/1背包问题

摘要: 0/1背包问题是背包问题中最基本的一种,其状态转移方程:m[i][j] = Max(m[i+1][j] , m[i+1][j - w[i]] + v[i]) 对比了自己的代码和王晓东书上的代码,感觉在两方面值得自己学习:1. jMax = Min(w[i] - 1 , c); 这样写法使得在(0 ~ jMax)可以直接赋值,无需判断,因此减少了判断次数;2. 对于求m[1][c],并不是放在循环体... 阅读全文

posted @ 2010-04-17 17:13 DiaoCow 阅读(1339) 评论(4) 推荐(0) 编辑

重建二叉树

摘要: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1944这道题是练习递归并深刻理解二叉树遍历的好题目(编程之美上也有)[代码]//重建二叉树void Rebuild(char *pPreOrder , char *pInOrder , Node **pRoot , int nTreeLen){ int nLeftLen ,... 阅读全文

posted @ 2010-04-17 15:32 DiaoCow 阅读(2588) 评论(0) 推荐(0) 编辑

2010年4月16日

整数划分和放苹果问题

摘要: 整数划分问题和正整数连续划分问题:http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1192308.html讲的很细致放苹果问题:把m个苹果放到n个盘子里,允许有空,有多少种放法http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2679递归方程... 阅读全文

posted @ 2010-04-16 20:52 DiaoCow 阅读(1699) 评论(0) 推荐(0) 编辑

最长递增子序列

摘要: http://acm.tzc.edu.cn/acmhome/problemdetail.do;jsessionid=558B14243DB112F263306E7D3741A8A9?&method=showdetail&id=1052在《编程之美》看过这题,中间利用二分查找可以把复杂度从O(N^2)降低到O(NlogN)[代码]int LIS(int * arr , int n){... 阅读全文

posted @ 2010-04-16 20:05 DiaoCow 阅读(308) 评论(0) 推荐(0) 编辑

最长公共子序列和字符串相似度

摘要: 经典的DP问题。1.假设求X = {x1 , x2 , x3, ... , xm}和Y = {y1 , y2 , y3, ... ,yn}的最长公共子序列MaxLen(Xm , Yn),我们可以这样思考:若xm == yn ,那么最长公共序列为MaxLen(Xm-1 , Yn-1) + 1;若xm != yn ,那么最长公共序列为MaxLen(Xm-1 ,Yn)和MaxLen(Xm ,Yn-1)中... 阅读全文

posted @ 2010-04-16 20:01 DiaoCow 阅读(1347) 评论(0) 推荐(0) 编辑

最大矩阵连乘次数

摘要: 这题只不过把王晓东书上求最小连乘次数改为了求最大连乘次数,方法还是DP状态转移方程:m[i][j] = Max(m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j]) [代码] 阅读全文

posted @ 2010-04-16 19:51 DiaoCow 阅读(458) 评论(0) 推荐(0) 编辑

导航