【Luogu】P3746组合数问题(矩阵)】的更多相关文章

CJOJ 2255 [NOIP2016]组合数问题 / Luogu 2822 组合数问题 (递推) Description 组合数\[C^m_n\]表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算组合数的一般公式: \[C^m_n=\frac{n!}{m!(n-m)!}\] 其中n! = 1 × 2 × · · · × n 小葱想知道如果给定n,m和k,对于所有…
题目链接 哇我一个活人的智商被题目碾压了 可以把问题转化为有nk个物品,问拿i件物品的方案数有多少种,其中i%k=r. 然后矩阵乘法加速DP即可. #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cctype> #define maxn 55 using namespace std; inline long long read(){…
组合数问题 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. Output 一行一个整数代表答案. Sample Input 2 10007 2 0 Sample Output 8 HINT 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 Solution 首先,不难发…
题目链接 让我们先来思考一个问题,在一张包含$n$个点的图上,如何求走两步后从任意一点$i$到任意一点$j$的方案数. 我们用$F_p(i,j)$来表示走$p$步后从$i$到$j$的方案数,如果存储原图信息的是一个邻接矩阵$G$,那么显然就有: $F_1(i,j)=G(i,j)$ $F_2(i,j)=\sum_{k=1}^n G(i,k) \times G(k,j)$ $F_2$的计算式子是不是十分眼熟,这不就是矩阵乘法嘛!那么就有$F_2=G^2$了. 让我们继续看下去: $F_3(i,j)=…
4870: [Shoi2017]组合数问题 题意:求 \[ \sum_{i=0}^{n-1} \binom{nk}{ik+r} \mod p \] \(n \le 10^9, 0\le r < k \le 50\) 组合数推了一下,有一些有趣的性质但是并不好做 想到了从意义方面考虑,但是没有深入,去看了题解 n大k小,一副矩乘的样子 就是求"n个物品取模k余r个的方案数" 因为取的个数模k,变得很有意思,可以把组合数的递推式矩乘了... #include <iostream…
就 是 要 我 们 从  n k  件 物 品 里 面 选 出 若 干 件,使 得 其 数 量 模 k 等 于 r 的 方 案 数 . dp方程 f [ i , j ] 表示前 i 件物品拿了若干件使得其数量模 k 等 于 j 的 方 案 数. 非常明显的 i 与 i - 1递推的DP,  可以转化推矩阵,进行矩阵乘法. 那么显然有f [ i , j ] =  f [ i − 1 ,j ]  + f[ i − 1,j − 1 ]  f [  i , j ]= f  [ i  − 1,j ]+ f…
题目传送门 戳我来传送 题目大意 给定一个图,问它的所有生成树的边权的最大公约数之和. 可以考虑计算边权的最大公约数为$i$的生成树的个数$f(i)$,最后累加答案. 然后考虑这样的生成树的个数怎么求,根据某个经典套路,我们可以容斥. 因为可以求出边权的最大公约数为$i$的倍数的生成树的个数$F(i)$,所以减去它的倍数的$f$就是$f(i)$了. 但是这么做会T掉. 可以用$O(W\log W)$的时间内预处理出为边权$i$的倍数的边数有多少条.然后高消前判断一下边数是否大于等于$n - 1$…
大致就是矩阵快速幂吧.. 这个时候会发现这些边权$\le 9$,然后瞬间想到上回一道题:是不是可以建一堆转移矩阵再建一个$lcm(1,2,3,4,5,6,7,8,9)$的矩阵?...后来发现十分的慢qwq也好像不对 于是考虑转化一下:首先把点$u$建成九个点,$P(u,i)$表示$u$点的第$i$个子点(其实就是计算编号用的). 先初始化,把所有u的点依次连上边权为1的边 然后比如有一条$(u,v)=x$的边,我们就把$P(u,x)与P(v,1)$连边(是不是十分精妙) 然后快速幂,搞定! #i…
题目链接 Solution 矩阵优化 \(dp\). 题中给出的式子的意思就是: 求 nk 个物品中选出 mod k 为 r 的个数的物品的方案数. 考虑朴素 \(dp\) ,定义状态 \(f[i][j]\) 代表前 \(i\) 个物品选择 \(mod~k\) 为 \(j\) 的方案数. 那么转移方程也很简单 : \[f[i][j]_{j\in[1,i)}=f[i-1][j]+f[i-1][(j-1+k)mod~k]\] 但是很显然这样是 \(O(n^2k)\) . 考虑优化,发现对于每一项状态…
思路 组合数的话,首先肯定是想到杨辉三角啊.不傻的都知道要预处理一张组合数表,但是你以为这样就可以了吗???显然,不可能的.那询问的时候复杂度就成了$\large{O(t*n)}$,凉凉.那咋办,用二维前缀和啊.在处理杨辉三角的时候顺便$\large{\mod k}$,否则会爆掉$\large{longlong}$我不知道,我猜的.二维前缀和应该都会,不会的自行百度. 下面的话等你看完代码再来看 这里说一下代码中有一句是这样的 mat[i][i+1] = mat[i][i]; 很多人都想问为什么…
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4386 (luogu) https://www.luogu.org/problemnew/show/P3597 为啥这种题我都不会了啊 题解: 首先如果边权全都为\(1\), 那么就新建一个计数器,每个点连计数器,计数器连个自环.然后邻接矩阵快速幂倍增即可 如果边权有\(2\)和\(3\), 就分别新建一个节点连向出点 细节不少,特别是判断是否大于\(k\)的时候不能爆l…
M斐波那契数列 此题对数学基础要求较高 来源矩阵乘法_百度百科 一个m*n的矩阵是一个由m行n列元素排成的矩形阵列.矩阵里的元素可以是数字符号或者数学式. 形如[acbd][abcd]的数表称为二阶矩阵,其中a,b,c,d称为这个矩阵的元素. 形如 [x1x2][x1x2] 的有序对称为列向量 设 A=[acbd]A=[abcd] B=[x1x2]B=[x1x2] 则C=[ax1+bx2ax2+bx1]C=[ax1+bx2ax2+bx1] 称为二阶矩阵A与平面向量B的乘积,记为AB=C 更一般的…
传送门 解题思路 以前bpw讲过的一道题,顺便复习一下矩阵乘法.做法就是拆点,把每个点拆成\(9\)个点,然后挨个连边.之后若\(i\)与\(j\)之间的边长度为\(x\),就让\(i\)的第\(x\)个点和\(j\)的第\(1\)个点连边.然后就是一个矩阵快速幂,时间复杂度\(O((n*9)^3log(n*9))\). 代码 #include<iostream> #include<cstdio> #include<cstring> #include<algori…
P2822 组合数问题 题意 题目描述 组合数\(C_n^m\)表示的是从\(n\)个物品中选出\(m\)个物品的方案数.举个例子,从\((1,2,3)\)三个物品中选择两个物品可以有\((1,2),(1,3),(2,3)\)这三种选择方法.根据组合数的定义,我们可以给出计算组合数\(C_n^m\)的一般公式: \[C_n^m=\frac{n!}{m!(n-m)!}\] 其中\(n!=1\times 2\times \cdots \times n\):特别地,定义\(0!=1\). 小葱想知道如…
Code: #include <cstdio> #include <cstring> #include <algorithm> #define setIO(s) freopen(s".in","r",stdin) #define N 60 #define ll long long #define mod p using namespace std; int k,r; long long n,p; struct matrix{ lo…
题面 luogu 题解 组合数 枚举有多少个\(1\),求出有多少种数 扫描\(n\)的每一位\(1\), 强制选\(0\)然后组合数算一下有多少种方案 Code #include<bits/stdc++.h> #define LL long long #define RG register using namespace std; template<class T> inline void read(T &x) { x = 0; RG char c = getchar()…
题意 给出\(n*n\)网格\((n<=10^5)\) 顶部有\(K\)个起点,底部有\(K\)个相对应的终点 每次只能向下或向右走 求有多少种从各个起点出发到达对应终点且路径不相交的路径? 对\(10^9 + 7\)取模 题解 按照组合数的套路 二维空间从一个h * w的矩形左上角走到右下角只向下或向右走的方案数为\(C_{h + w}^{h}\) 这题直接求不好求,我们考虑容斥 可以发现,如果两个路径相交,就相当于交换了终点 那么我们枚举每个起点的终点,乘上一个容斥系数\((-1)^t\),…
一.组合数:问题引入:现在有 n 个球,取其中的 k 个球,问一共有多少种方式?答案: 公式直观解释:我们考虑有顺序地取出 k 个球:第一次有 n 种选择,第二次有 n-1 种选择,...,第 k 次有 n-k+1 种选择.故一共有 种方案数:但如果不计算顺序的话,那么对于一种方案,其实有 k! 种不同的顺序,所以再除以 k! 即为最终的答案.实际编程所需要的公式:C(n,k) = C(n − 1,k) + C(n − 1,k − 1)题目:luogu 2822 组合数问题(边计算边模)luog…
洛谷P2822 数学真重要啊…… 其实解这一题的关键就是组合恒等式:C(n,m)=C(n-1,m)+C(n-1,m-1),然后再知道组合数的矩阵(杨辉三角)和题中n,m的关系就很容易解决了(然而做这题之前我并不知道组合恒等式于是杯具了) 由上文提到的几何恒等式,我们可以将组合数打成如下矩阵(C(i,j)行数代表i,列数代表j(均从0开始)) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 ……………… 接下来我们来看要求的结论:求所有的0≤i≤n,0≤j≤min(i,m)中有多少对(…
LOJ #2027. 「SHOI2016」黑暗前的幻想乡 考虑到每个公司一条边,那就等价于没有任何一家公司没有边. 然后就可以容斥+矩阵树定理,没了. LOJ #2028. 「SHOI2016」随机序列 把一串连乘的数贡献到最左边的位置上,然后发现除了第一个以外都有加减两种情况刚好抵消,就只需要考虑第一个数的贡献了. 然后就没了. LOJ #2036. 「SHOI2015」自动刷题机 二分两遍\(n\),没了. LOJ #2037. 「SHOI2015」脑洞治疗仪 线段树. LOJ #2038.…
Basic knowledge \[ C_n^m=\frac{n!}{m!(n - m)!} \] 快速幂 // Pure Quickpow inline int qpow(int n, int m, int mod) { ll tot = 1; for (ll k = n; m; k = k * k % mod, m >>= 1) if (m & 1) tot = tot * k % mod; return tot; } /* Matrix Quickpow * Au: H15tev…
P3746 [六省联考2017]组合数问题 \(dp_{i,j}\)表示前\(i\)个物品,取的物品模\(k\)等于\(r\),则\(dp_{i,j}=dp_{i-1,(j-1+k)\%k}+dp_{i-1,j}\) \(dp_{i,0},dp_{i,1},dp_{i,2}.....dp_{i,k-1}\) \(\Longrightarrow\) \(dp_{i+1,0},dp_{i+1,1},dp_{i+1,2}.....dp_{i+1,k-1}\) 仔细想想,你能构造出矩阵的 #includ…
CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 .. N) Mod M 的值,其中 Concatenate (1 ..N)是将所有正整数 1, 2, -, N 顺序连接起来得到的数.例如,N = 13, Concatenate (1…
Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂) Description 广义的斐波那契数列是指形如\[A_n=p*a_{n-1}+q*a_{n-2}\]的数列.今给定数列的两系数p和q,以及数列的最前两项a1和a2,另给出两个整数n和m,试求数列的第n项an除以m的余数. Input 输入包含一行6个整数.依次是p,q,a1,a2,n,m,其中在p,q,a1,a2整数范围内,n和m在长整数范围内. Output 输出包含一行一个整数,即an除以m的余数. Sample Input…
Luogu 1962 斐波那契数列(矩阵,递推) Description 大家都知道,斐波那契数列是满足如下性质的一个数列: f(1) = 1 f(2) = 1 f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 请你求出 f(n) mod 1000000007 的值. Input 第 1 行:一个整数 n Output 第 1 行: f(n) mod 1000000007 的值 Sample Input 5 Sample Output 5 Http Luogu:htt…
Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 Output 输出A^k 共n行,每行n个数,第i行第j个数表示矩阵第i行第j列的元素,每个元素模10^9+7 Sample Input 2 1 1 1 1 1 Sample Output 1 1 1 1 Http Luogu:https://www.luogu.org/prob…
Luogu T7152 细胞(递推,矩阵乘法,快速幂) Description 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每天每个该细胞可以分裂出 x − 1 个新的细胞. 小 X 决定第 i 天向培养皿中加入 i 个细胞(在实验开始前培养皿中无细胞). 现在他想知道第 n 天培养皿中总共会有多少个细胞. 由于细胞总数可能很多,你只要告诉他总数对 w 取模的值即可. Input 第一行三个正整数 n, x,w Outpu…
BZOJ_4870_[Shoi2017]组合数问题_矩阵乘法 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 Output 一行一个整数代表答案. Sample Input 2 10007 2 0 Sample Output 8 设$f[i][j]$表示$i$个球,取出$m(m$%$k=r)$个的方案数. 转移:$f[i][j]=f[i-1][j]+…
题面 给定一棵 \(n\) 个点的树,点带点权. 有 \(m\) 次操作,每次操作给定 \(x,y\) ,表示修改点 \(x\) 的权值为 \(y\) . 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. 题解 如题所示 , 是个模板题 ... 首先考虑静态 \(dp\) , 令 \(dp_{u,0/1}\) 为 \(u\) 不存在 / 存在 于最大权独立集的权值大小 . 然后转移很显然 , 一个点存在于独立集中时 , 儿子全都不能选 . 不存在时 , 儿子可选可不选 . 令 \(v\)…
[BZOJ4870]组合数问题(动态规划,矩阵快速幂) 题面 BZOJ 洛谷 题解 显然直接算是没法做的.但是要求的东西的和就是从\(nk\)个物品中选出模\(k\)意义下恰好\(r\)个物品的方案数.\(n\)的范围这么大,往快速幂的方面靠.设\(f[i][j]\)表示从前\(i\)个物品中选了模\(k\)意义下\(j\)个物品的方案数,转移显然,快速幂即可. 时间复杂度\(O(k^3logn)\). 稍微注意一个细节,\(k=1\)的时候,矩阵的唯一一项不是\(1\),而是\(2\).所以在…