摘要:
用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 阅读全文
摘要:
匈牙利算法。在二分图中每行对应一个节点,每列对应一个节点,每个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 阅读全文
摘要:
欧拉函数的原始公式是用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 += 阅读全文