|
|
|
|
|
|
tc经典题
摘要:推荐的好题不一定是难题,但往往带有那么一点代表性。凡是由别人推荐的题目,偶会加上推荐人ID和blog地址。偶自己推荐的题目,偶会尽量推荐一份简洁的代码。当天推荐的题会以红色标记。Single Round MatchSRM 490 DIV1 550pt ( 非常考英语阅读和代码实现能力的一题 ) 推荐代码: wata,官方题解SRM 490 DIV1 1000pt ( BFS界限需要YY,矩阵or循环节,有些细节 ) 推荐代码: jialin,官方题解,practice room wataSRM 489 DIV1 500pt ( 非常忽悠的一题 ) 推荐代码: 就几行,随便谁的代码吧 http:
阅读全文
指数型母函数
摘要:母函数对于组合类型数列的研究很有帮助,而指数型母函数可以很方便的拿来研究排列类型的数列。 例:考虑n个元素组成的多重集,其中a1重复了n1次,a2重复了n2次……ak重复了nk次,从中取r个排列,求不同的排列数。 如果根据母函数。取r个数组合,则组合数是:G(x) = (1+x+x^2+x^3)*(1+x+x^2)*(1+x+x^2+x^3)。 但现在我们要求的是排列数,根据排列和组合的关系,我们可以引入如下公式: G(x) = (1+x+x^2/2!+x^3/3!)*(1+x+x^2/2!)*(1+x+x^2/2!+x^3/3!) 该公式就是对应的指数型母函数。 那么上面例子的指数型母函数.
阅读全文
线段树
摘要:题目是从傻崽博客里拉来的,自己写的代码。1.hdu1166 敌兵布阵更新节点,区间求和。一次AC,做的时候也没遇见什么问题!View Code #include <iostream>#include <string>using namespace std;#define MAX_N 50000string str;int sum; //记录总兵数int num[MAX_N+1]={0}; //记录各个兵营的兵数typedef struct node{ int left; int right; int data; node* lchild; node* rchild; n
阅读全文
DP46题
摘要:DP 46 自己写的代码 收藏 Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱 最脑残的是把总的概率以为是抢N家银行的概率之和… 把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j之下能抢的大洋); 正确的方程是:f[j]=max(f[j],f[j-q[i].money]*q[i].v) 其中,f[j]表示抢j块大洋的最大的逃脱概率,条件是f[j-q[i].money]可.
阅读全文
博弈
摘要:博弈学习:先看三个博弈,了解基本概论,记住公式。明白必败点(P)和必胜点(N)的概论,我觉得用必败态和必胜态更合适一点。这里要注意理解一下。然后是后继点和sg值,后继点(态)是从当前点(态)进过一步能够走到的状态。 sg值是定义为:大于等于0 且 不等于它所有后继点的sg 值的最小整数sg值为0说明这是必败点,不为0说明这是必胜点。一个很优雅的结论:(在NIM博弈中) 对多组数。sg(x)= sg(x1) ^ sg(x2) ^ …… ^ sg(xn)。 sg(x) 为0,为P,sg(x)不为0,为N。杭电上的题目:hdu 1517从1开始,每次可
阅读全文
费用流
摘要:最小费用最大流(转至Lost(转至威士忌)的代码))):每次在s-t之间找出费用最小的一条路径即单源最短路,如果t点不再被访问到,则算法终止。否则,按着最短路径找出最小剩余容量c,最大流量加上c,再更新最短路径上的边,前向弧减去c,反向弧加上c,并且造一条逆向的费用边,最小费用加上每条边的花销,每条边的花销=单位费用*c。 最小费用最大流既能求最小费用,又能得出最大流,是更为一般的模型。牛人哈~~~自己也懒得看原理了,代码中使用了bellman-ford算法,貌似可以改进为spfa,会更好。代码spfa+静态邻接表代码
阅读全文
hdu 数学题
摘要:发现我的题目的数学题做的很不好,必须努力努力下了。下面都是hdu上一些比较简单的数学题,好好做一下,然后学下数论的知识!1006// ---- 设当前的时间为 H:M:S, 其中 0 <= H < 12, 0 <= M < 60, 0 <= S < 60, H,M皆为整数, S为实数// ---- 于是时针、分针、秒针相对于时刻 0:0:0 的转角分别为// ---- A(H) = 30H + M/2 + S/120;// ---- A(M) = 6M + S/10;// ---- A(S) = 6S;求解下式:D <= | A(H) - A(M) |
阅读全文
Catalan
摘要:今天我看我那本很久以前买的本来想当编程参考书的后来因为既看不懂又没有啥用途而扔下的《组合数学》来着,下午看到“特殊计数序列”这一章,又看到了久违的Catalan数,思考了一下,在这里菜菜地写下一点心得供天下大牛们鄙视。Catalan数者,Cn=C(2n,n)/(n+1)也。举前几个例子:C0=1C1=1C2=2C3=5C4=14C5=42C6=132C7=429C8=1430C9=4862这些数有什么递推的规律呢?Cn= C0 * Cn-1 + C1 * Cn-2 + C2 * Cn-3 + ... + Cn-1 * C0(这里面不好打sigma,大家凑和看吧。)Cn(Catalan序列的第n
阅读全文
0-1背包 完全背包 多重背包 模板
摘要:代码网上抄来的一份代码,还是相当不错的!
阅读全文
最大流
摘要:基本知识: 流网络G = (V,E)是一个有向图,其中每条边有一非负容量c(u,v) = 0。如果(u,v) 不属于E,则假定c(u,v) = 0。 两个特殊点:源点:S 汇点: T c:容量函数 f:实值函数(也就是最大流)三个性质: 容量限制:对所有边,f(u,v) = c(u,v); 反对称性:对所有边,f(u,v) = - f(u,v); 流守恒性:对除源点和汇点外的任意点,该点的流的为0。该点的流记为:|f|。三种重要思想: 残留网络:Gf = (V,Ef) , 其中边(u,v)的残留流量cf(u,v) = c(u,v) - f(u,v)
阅读全文
二分图最佳匹配
摘要:(转)KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[i],顶点Yi的顶标为B [i],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终 成立。KM算法的正确性基于以下定理: 若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配。 这个定理是显然的。因为对于二分图的任意一个匹配,如果它包含于相等子图,那么它的边权和等于所有顶点的顶标和;如果它有的边不包含
阅读全文
二分图最大匹配
摘要:HDU 1150:http://acm.hdu.edu.cn/showproblem.php?pid=1150 最小覆盖点 == 最大匹配数(选取最少的点数,使这些点和所有的边都有关联——把所有的边的覆盖) 两台机器,有n和m个工作模式,起始工作模式都为0,现在有k件工作,第i件工作可分别在两个机器上用各自的模式工作,但换模式要重启,问重启的最小次数。 写的时候因为是找二分最大匹配的题目时找到写的,想到了二分上去,也知道是求最小覆盖点 == 最大匹配数,但不是很能理解,先把代码写了再说。 写的时候注意起始模式是0,所以换模式时把0的排除再外。(因为这个原因错了很多次)一:邻接阵做法代码Code
阅读全文
树形DP 题目库
摘要:树形DP,是一个很好理解的DP,树形结构很容易理解DP的! 在存储结构上,学习了左孩子,右兄弟的结构:定义代码:定义代码添加边:[代码]hdu 1520 Anniversary partyhttp://acm.hdu.edu.cn/showproblem.php?pid=1520简单树形DP,做的第一个DP。代码hdu 3660 Alice and Bob's Triphttp://acm.hdu.edu.cn/showproblem.php?pid=3660Bob选最大子结点走,Alice选最小子结点走!但因为要符合《L,R》,所以加一个判断条件:tree[dir].sum + tree[
阅读全文
hdu 3501 数学题
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=3501一道数学题,不是很难,老题了。但从中学到了不少东西。 1:if gcd(n,i) == 1 then gcd(n,n-i) == 1 so sum(n) = n * phi(n) / 2; //sum(n): 比n小的和n互质的数的和 phi(n): 比n小的跟n互质的数的个数2:n = P1^n1 * P...
阅读全文
hdu 1094 所想到的
摘要:本来是想练一下线段树的,看到这题逆序对,不用下树状数组都可惜了啊! 用树状数组很简单,就中间有一个细节,因为数组中是有0的,在我进行区间求和的时候,判断条件是x>=0,而lowb(0)==0,这就会使程序陷入死循环!注意! 因为这题是求数组a位置i右边比a[i]大的数的个数,按照网上的说法(http://apps.hi.baidu.com/share/detail/16352612): ...
阅读全文
数状数组
摘要:树状数组不用多讲了,网上有关于这方面的内容很多,找找都是一大片,而且也不是很难,去学一下就可以很快领悟,至于怎么用,这就需要大量的做题了!先提个注意点,由于Lowbit(0) = 0,这会导致x递增的那条路径发生死循环,所有当树状数组中可能出现0时,我们都全部加一,这样可以避免0带来的麻烦~~简单: POJ 2299 Ultra-QuickSorthttp://acm.pku.edu.cn/JudgeOnline/problem?id=2299 求逆序数,可以用经典的归并排序做,也是基本的树状数组题目。 因为a[i]比较大,但只有最多500000个,所以要离散化。 逆序数就是求前面的数比后面.
阅读全文
bellman_ford
摘要:bellman_ford(贝尔曼-福特)算法:因为dijkstra算法不能处理带负权边的图,这时候就可以利用bellman_ford算法。( 设想从我们可以从图中找到一个环路(即从v出发,经过若干个点之后又回到v)且这个环路中所有路径的权值之和为负。那么通过这个环路,环路中任意两点的最 短路径就可以无穷小下去。如果不处理这个负环路,程序就会永远运行下去。 而Bellman-Ford算法具有分辨这种...
阅读全文
SPFA + 静态邻接表 模板
摘要:SPFA — shotest path faster algorithm,是一个效率很高的求最短路径的算法,也可以说是bellman-ford算法的优化版。 具体做法是先把起点放入一个队列中。每次取出队顶元素,并pop,看跟该点相邻的其他点是否能够松弛,如果可以松弛,改变数值,如果该点不在队列中,则把能该点push到队列中,直到队列为空。 为了速度更快,可以用邻接表来存储,这样,找与起...
阅读全文
静态邻接表
摘要:上次比赛的时候有一道题目要用到最小生成树,用动态邻接表存储边的结构,结果MLE。实际上很多次了,没有学会用静态邻接表,吃亏不小。 今天趁着Lost大牛来这请客并教育我一番的劲头下,到它(哦,不,是他)的blog上偷盗了他的邻接表代码,花了一个晚上的时间,自己加上了自己的注释,并且加上了权的情况,终于把它搞懂了!代码
阅读全文
|
|