![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM模板
文章平均质量分 59
windmissing
喜欢编程,喜欢思考,方向明确
展开
-
求逆序数
1.用树状数组求逆序数 缺点:只能对整数求逆序数 #include "TreeArray.h" /* 算法: 由树状数组求逆序对。加入元素i即把以元素i为下标的a[i]值+1,从队尾到队首入队, 每次入队时逆序对数 += getsum(i - 1),即下标比它大的但是值比它小的元素个数。 因为树状数组不能处理下标为0的元素,每个元素进入时+1,相应的其他程序也要相应调整。 求出原始的序列的原创 2012-01-04 17:00:24 · 5300 阅读 · 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 · 1741 阅读 · 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 · 1202 阅读 · 1 评论 -
搜索
HDU1254 推箱子 BFS+优先队列 HDU2433 Travel BFS求最短路径树+优化 HDU1401 Solitaire 双向搜索原创 2011-12-31 13:41:51 · 963 阅读 · 0 评论 -
数论-Special Numbers
1. Fibonacci Number 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377, 610 … Formula: 2. Lucas Number 1, 3, 4, 7, 11, 18, 29, 47, 76, 123... Formula: 3. C原创 2011-12-31 13:04:55 · 1440 阅读 · 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 · 2465 阅读 · 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 · 2679 阅读 · 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 · 1514 阅读 · 2 评论 -
矩阵的应用
/* Mat.h 矩阵运算:加、乘、二分求幂、二分求和 无返回值,按引用传参,非递归 */ #include using 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 · 2956 阅读 · 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 · 2923 阅读 · 8 评论 -
二维费用背包
解释: P05: 二维费用的背包问题 程序模板: #include using namespace std; #define MAXN 105 #define MAXV1 105 #define MAXV2 105 int c1[MAXN], c2[MAXN], v[MAXN], dp[MAXV1][MAXV2]; int N, V1, V2; /* 二维费用的背包问题 有N件物品,原创 2012-01-07 19:24:00 · 1621 阅读 · 1 评论 -
背包问题
背包问题讲解: P01: 01背包问题 P02: 完全背包问题 P03: 多重背包问题 P04: 混合三种背包问题 模板代码:Bag.h #include using namespace std; #define MAXN 505 #define MAXV 10005 int c[MAXN], v[MAXN], n[MAXN], dp[MAXV]; int原创 2012-01-07 16:19:15 · 1160 阅读 · 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 · 1887 阅读 · 1 评论