![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
组合数学
Aoxuets
REM 是我的, 拔剑吧!
展开
-
HDU 1796 (容斥原理)
容斥原理练习题,忘记处理gcd 和 lcm,wa了几发0.0.#include#include#includeusing namespace std;typedef long long ll;ll Num[30];ll gcd(ll a,ll b){ return b == 0 ? a : gcd(b,a%b);}int main(){原创 2016-03-14 10:54:15 · 302 阅读 · 0 评论 -
Uva 10247 (组合计数)
题目:有一颗 K 叉完全树, 深度 D,有 N 个节点, 给你 [1 - N] 给这颗树的节点标号。 父节点 要比所有子节点的标号小。 问有多少种标号方法。分析:题目的标号是不允许重复的。所以根节点的表示是最小的。 对于一颗 K 叉 D 深度的树, 其节点数为 Nk,dN_{k,d}, 首先根节点的标号数是最小的。 然后就会剩下 N-1 个标号, 就相当于把 N-1个数分为 K 组, 每组 N原创 2016-07-27 14:49:45 · 440 阅读 · 0 评论 -
Longest Increasing Subsequence Arrays (组合计数)
题目:LINK 题意:一个序列长度为 M, 每个数值在 [1, N], 问这个序列的最长上升子序列刚好 为N 的时候, 序列有多少种。分析:感谢kg2006的思路。 首先选取 N 个位置 S1,S2,S3 ….. SN。 设S1 之前的位置没有 1, S1 - S2 没有 2… 则有 S1 之前 S1-S2之间 … SN-1 - SN 之间的数都是有 N-1 中选择方案。 而 SN 之后原创 2016-07-25 13:21:30 · 270 阅读 · 0 评论 -
POJ 3761 (组合计数)
题意:冒泡排序一轮: 相邻之间的两个数比较, 然后交换。 现在给你一个有序的数列, 从 1 - N;而且是经过 K 轮交换得来的。 问你有多少个这样的数列。分析: 对于一个数列, 我们是有一个反序表的 Ai, 反序表中的 Ai 表示 i 左边有多少比 i 要大的数的个数。可以很容易得到反序表 和 原序列是一一对应的。 而经过冒泡排序的一轮, 是可以发现把 反序表中大于0 的数都减一原创 2016-07-24 16:23:04 · 338 阅读 · 0 评论 -
BZOJ 1002: [FJOI2007]轮状病毒
题目:[LINK](http://www.lydsy.com/JudgeOnline/problem.php?id=1002)分析:基尔霍夫矩阵, 生成树计数, 通过行列式找出递归关系就好了Code:/************************************************************** Problem: 1002 User: aoxuets原创 2016-06-05 14:20:42 · 410 阅读 · 0 评论 -
Light Oj 1005
题意: 从 n*n 的棋盘中放置 K 个 行和列不冲突的棋子思路: 组合数学, 先选 k 个 行, k 个列, 就是 C(n,k) ^ 2;然后 K 个棋子不相同, K ! 全排列#includeusing namespace std;typedef long long LL;LL Num[40][40];void Init(){ Num[0][0原创 2016-03-14 10:59:33 · 316 阅读 · 0 评论 -
LIght OJ 1179
题意: 约瑟夫环问题, 给你N 个人, 没K个出队, 问最后剩下的人的编号。思路: 直接模拟会T, 对于N个人 , 是一个约瑟夫环问题, 当第一个人出队后, (标号一定为 k % n -1) 剩下的 (N - 1) 个人 为 k%n, k%n+1, .....n, 0, 1, ...... k%n - 2; 重新编个号 :为 0 , 1, 2, .... n-1原创 2016-03-14 10:59:58 · 447 阅读 · 0 评论 -
Light OJ 1058
题意: 简单的就组合数 C(m,n);数据多,大, 要预处理;#includeusing namespace std;typedef long long LL;const int maxn = 1e6 + 2;const LL MOD = 1000003;LL Pow_Mod(LL a, LL n){ LL ret = 1; while(原创 2016-03-14 11:00:05 · 322 阅读 · 0 评论 -
Light OJ 1095
题意: 给你 N 个数, 总共有 N! 种排列, 现在 要你统计前 M 个数 刚好 有K 个数 在原来的位置上 的排列个数思路: 首先 M 中选 K C(m,k); 则 共 剩下 n - k 个数, 而 n-m 个数中可以允许有数在原来的位置; 故 枚举 n-m 中有多少个数 在原来的位置上, 剩下的 n - k - i 个数 就是一个错排列了 (错排原创 2016-03-14 11:00:07 · 346 阅读 · 0 评论 -
Light OJ 1102
题意: 给你一个数 N , 求分成 K 个数 (可以为 0 ) 的种数;思路: 类似 在K个抽屉放入 N 个苹果, 不为0, 就是 在 n-1 个空隙中选 m-1个; 为 0, 就可以先在 K 个抽屉一个苹果, 之后类似了; 故答案就是 C(N+K-1, K-1); 数据大, 还控制内存。。。 按位乘 + 逆元 #includeusi原创 2016-03-14 11:00:12 · 339 阅读 · 0 评论 -
HDU 4549
水题: 费马小定理+快速幂+矩阵快速幂 (第一次用到费马小定理) #includeusing namespace std;typedef long long LL;const LL MOD = 1000000006;const LL MOD1 = 1000000007;struct Matrix{ LL NUM[2][2]; Matrix operat原创 2016-03-14 10:55:20 · 396 阅读 · 0 评论 -
HDU 5446
题意: 大组合数取余 (素数连乘)思路:对于答案 XX % pi = ai === C(m,n) % pi;然后就是用孙子定理求出X, ai 用 卢卡斯定理求得中间 LL * LL 会爆, 运用按位乘法对于 m * n % K, 把 m 看成 二进制形式的多项式, 拆开和 n 相乘, 再取余#include using namespace std;cons原创 2016-03-14 10:55:46 · 314 阅读 · 0 评论 -
51nod 1228 (伯努利数 + 组合数学)
题目:求这个∑i=1nik\sum\limits_{i = 1}^{n} i ^ k 题目给你 n , k。分析:伯努利数于幂数和的关系: 伯努利数: 这么多性质可以直接写了Code:import java.util.Scanner;public class Main { public static Scanner cin = new Scanner(System.in);原创 2016-07-28 13:35:31 · 535 阅读 · 0 评论