上一页 1 ··· 163 164 165 166 167 168 169 170 171 ··· 182 下一页
摘要: 用dfs进行整数拆分,对于每种情况计算组合数。为了避免重复计算,必须使用有重集的组合,com(f[i] - 1 + num[i], num[i]),这是num[i]个有i个节点的子树的情况总数。这个公式是用于求所选物品可重复选择,且重复选出的同一物品完全相同的情况。View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>using namespace std;#define maxn 41long 阅读全文
posted @ 2011-03-19 15:39 金海峰 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 匈牙利算法。在二分图中每行对应一个节点,每列对应一个节点,每个1对应一条连接该1所在行和列节点的边。如果最大匹配数==n则可行,否则不行。对于可行的情况,只需要每次交换两个列节点的编号,直到所有的匹配都是行号==列号的为止。View Code #include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <vector>using namespace std;#define maxn 105int n, ptn[maxn], ans[m 阅读全文
posted @ 2011-03-19 15:19 金海峰 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 欧拉函数的原始公式是用n连乘(1-1/pi)。pi是n的素因子。我们可以通过一个n^2级筛法的方式去筛,这样就保证了每个合数都会被其所有素因子筛一次,只要在筛的时候在其结果上乘上1-1/pi)即可。View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxn 3000005double ans[maxn];bool prime[maxn];int next(int a){ a += 阅读全文
posted @ 2011-03-19 15:13 金海峰 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 题意:看两个给定对应点的多边形是否经过位移,旋转,缩放可重叠。分析:只需要判断每对应两点的距离是否成比例。注意:不只是相邻点,不相邻的也要判断。计算好计算过程中数值的大小,那些需要用long long。View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>usingnamespace std;#define maxn 305struct XPoint{int x, y;XPoint(){}XPo 阅读全文
posted @ 2011-03-16 20:05 金海峰 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 题意:有n个元素,开始每个元素自己一栈,有两种操作,将含有元素x的栈放在含有y的栈的顶端,合并为一个栈。第二种操作是询问含有x元素下面有多少个元素。分析:并查集,因为当我们知道栈中元素的总数,和某元素到栈顶的距离,我们就能知道这个元素下面有多少元素。我们并操作的时候,始终使用在上面栈的代表元来做合并之后的代表元,这样也就达到了栈中的代表元是栈中的堆顶元素的效果,我们只需在每个代表元中记录该栈中的元素总数即可。然而我们还需要得知某元素到代表元的距离,这样我们就需要记录每个元素到其父亲的距离,把它到代表元上所经过的距离加起来,即为它到代表元的距离。这样我们就得出了结果。另外优化的过程(把路上所有元 阅读全文
posted @ 2011-03-13 12:14 金海峰 阅读(1333) 评论(0) 推荐(2) 编辑
上一页 1 ··· 163 164 165 166 167 168 169 170 171 ··· 182 下一页