ACM模板
文章平均质量分 59
windmissing
喜欢编程,喜欢思考,方向明确
展开
-
求逆序数
1.用树状数组求逆序数缺点:只能对整数求逆序数#include "TreeArray.h"/*算法:由树状数组求逆序对。加入元素i即把以元素i为下标的a[i]值+1,从队尾到队首入队,每次入队时逆序对数 += getsum(i - 1),即下标比它大的但是值比它小的元素个数。因为树状数组不能处理下标为0的元素,每个元素进入时+1,相应的其他程序也要相应调整。求出原始的序列的原创 2012-01-04 17:00:24 · 5313 阅读 · 2 评论 -
用指针传递的字典树
#include using namespace std;#define NUM 26#define TYPE 'A'class dictree{public: dictree *child[NUM]; string *value;//节点所存的数据,根据题目而使用不同的类型或数据 dictree(){memset(child,0,sizeof(child));value=N原创 2012-05-18 21:34:39 · 1775 阅读 · 1 评论 -
带权的二分匹配
#include #include /*********************************************************///这些都是KM模板const int N = 305;//二分图中每一个子图的点的最大数const int INF = 1<<28;//正无穷bool xckd[N], yckd[N];//在一次DFS中,Xi与Yi是否在交错树上原创 2012-05-18 20:08:28 · 1211 阅读 · 1 评论 -
搜索
HDU1254 推箱子 BFS+优先队列HDU2433 Travel BFS求最短路径树+优化HDU1401 Solitaire 双向搜索原创 2011-12-31 13:41:51 · 972 阅读 · 0 评论 -
数论-Special Numbers
1. Fibonacci Number0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377, 610 …Formula:2. Lucas Number1, 3, 4, 7, 11, 18, 29, 47, 76, 123...Formula:3. C原创 2011-12-31 13:04:55 · 1452 阅读 · 2 评论 -
多源最短路径 Floyd
/*Floyd.h时间复杂库:O(N^3)用途:1.判断中否联通s[a][b] != inf -> 联通s[a][b] == inf -> 不联通2.两点间最短路径长度s[a][b] != inf -> 最短路径长度 = s[a][b]s[a][b] == inf -> 不联通3.两点间的最短路径的跳数初始化时所有路径长度设为单位长度s[a][b] != inf -> 跳数原创 2011-12-31 14:41:10 · 2478 阅读 · 2 评论 -
并查集
/* UnionFindSet.h 并查集,非递归方法,含路径压缩,数组从0开始合并时,前者合并入后者,不区分大小*/ #include using namespace std; #define MAXN 30005 class UFS{public: int n; int father[MAXN+1];//集合根结点 int rank[MAXN+1原创 2011-12-30 15:51:30 · 2692 阅读 · 5 评论 -
树状数组
/*TreeArray.h树状数组,一维和二维都有。数组必须从1开始问题:已知数组a[],元素个数为n,现在更改a中的元素,要求得新的a数组中i到j区间内的和解决方法:从图中不难发现,c[k]存储的实际上是从k开始向前数k的二进制表示中右边第一个1所代表的数字个元素的和(这么说可能有点拗口,令lowbit为k的二进制表示中右边第一个1所代表的数字,然后c[k]里存的就是从a[k原创 2011-12-30 13:45:04 · 1527 阅读 · 2 评论 -
矩阵的应用
/*Mat.h矩阵运算:加、乘、二分求幂、二分求和无返回值,按引用传参,非递归*/#includeusing namespace std;#define MAX 55__int64 mod;class Mat{public: __int64 s[MAX][MAX]; int sizei,sizej;public: Mat(int a = MAX, int b = M原创 2011-12-29 10:05:02 · 2966 阅读 · 9 评论 -
博弈,求SG值
#include using namespace std;#define MAX 1005/*计算从1-n范围内的SG值。Array(存储可以走的步数,Array[0]表示可以有多少种走法)Array[]需要从小到大排序/*HDU1847博弈SG函数1.可选步数为1-m的连续整数,直接取模即可,SG(x) = x % (m+1);2.可选步数为任意步,SG(x) = x;3.可原创 2012-01-09 14:07:44 · 2938 阅读 · 8 评论 -
二维费用背包
解释:P05: 二维费用的背包问题程序模板:#include using namespace std;#define MAXN 105#define MAXV1 105#define MAXV2 105int c1[MAXN], c2[MAXN], v[MAXN], dp[MAXV1][MAXV2];int N, V1, V2;/*二维费用的背包问题有N件物品,原创 2012-01-07 19:24:00 · 1633 阅读 · 1 评论 -
背包问题
背包问题讲解:P01: 01背包问题P02: 完全背包问题P03: 多重背包问题P04: 混合三种背包问题模板代码:Bag.h#include using namespace std;#define MAXN 505#define MAXV 10005int c[MAXN], v[MAXN], n[MAXN], dp[MAXV];int原创 2012-01-07 16:19:15 · 1172 阅读 · 1 评论 -
普通母函数
struct node//用于存储每个元素的大小与数量{ int value;//大小 int num;//数量}lottery[100];void Generating(int n, int sum)//母函数过程,n表示元素的个数,sum表示和的最大值{ int c1[1000] = {1}; int c2[1000] = {0}; int i, j, k; for(i =原创 2012-05-19 15:44:59 · 1915 阅读 · 1 评论