
组合计数
你别教我打游戏
直面困难,重视过程,追求结果,淡忘过去。
展开
-
组合数C(m,n)的四种求法
适用类型AW885. 求组合数 I#include <stdio.h>using namespace std;const int mod = 1e9+7, N = 2010;int n,a,b,c[N][N];int main(){ for(int i=0;i<N;i++){ for(int j=0;j<=i;j++){ if(j==0) c[i][0] = 1; else c[i][j] =.原创 2020-09-19 14:07:08 · 2393 阅读 · 2 评论 -
卡特兰数推导、C++计算、典型应用
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int p = 1e9+7, N = 2e5+10; ll n,f[N] = {1},inf[N] = {1};ll qp(ll a,ll b){ ll res = 1; while(b){ if(b&1) res = res*a%p; a = a*a%p; b >原创 2021-03-04 18:23:44 · 265 阅读 · 0 评论 -
AcWing 1316. 有趣的数列 (卡特兰数推导)
1316. 有趣的数列卡特兰数求很轻松,关键是如何理解这道题目就是卡特兰数。通过找数字规律的,就算了吧#include<stdio.h>using namespace std;// C(2n,n)-C(2n,n+1)typedef long long ll;const int N = 2e6+10;int primes[N], cnt = 0;bool vis[N];int n, P;int s1[N], s2[N];void getPrimes(){ f原创 2020-09-24 23:27:43 · 201 阅读 · 0 评论 -
AcWing 1315. 网格 (组合数的高精度运算、卡特兰数)
1315. 网格首先利用推导卡特兰的方法,把所有不合法的路径,通过与y=x+1y=x+1y=x+1作对称变换。终点就是(m−1,n+1)(m-1,n+1)(m−1,n+1),所以最终方案数就是C(n+m)−C(n+m,m−1)C(n+m)-C(n+m,m-1)C(n+m)−C(n+m,m−1)组合数的高精度计算步骤:线性筛素数质因数分解(阶乘的质因数分解)高精度乘法高精度减法#include<stdio.h>#include <iostream>using n原创 2020-09-23 19:48:22 · 253 阅读 · 0 评论 -
AcWing 1312. 序列统计 (构造、组合恒等式、卢卡斯定理)
解:L<=a1<=a2<=a3<=……ak<=RL<= a1 <= a2 <= a3 <= …… ak <= RL<=a1<=a2<=a3<=……ak<=R构造一个和它一一对应的序列L<=b1<b2+1<b3+2……<bk+k−1<=R+k−1L<= b1 < b2+1 < b3+2 …… <bk+k-1 <= R+k-1L<=b1<原创 2020-09-20 15:24:14 · 116 阅读 · 0 评论 -
AcWing 1310. 数三角形 (组合数、GCD)
1310. 数三角形关键点就是如何去除共线的三个点。按斜率分类讨论。#include <stdio.h>using namespace std;typedef long long ll;int m,n;ll gcd(ll a,ll b){ return b?gcd(b,a%b):a;}ll C(ll n){ return n*(n-1)*(n-2)/6;}int main(){ scanf("%d%d",&m,&n);原创 2020-09-16 22:35:44 · 162 阅读 · 0 评论 -
AcWing 1309. 车的放置 (加法原理、乘法原理、组合数排列数的求法、乘法逆元)
1309. 车的放置分步做:先放上面的矩形,后考虑下面的矩形。分类做:依次求出,上面放置0、1、2、……、k0、1、2、……、k0、1、2、……、k个车的,而下面放置k、k−1、k−2、……、0k、k-1、k-2、……、0k、k−1、k−2、……、0的方案数,分别累计到答案里。核心:加入上面放iii个、下面就放置k−ik-ik−i个,那么此时方案数为Cbi∗Pai∗Cdk−i∗Pa+c−ik−iC_{b}^{i}*P_{a}^{i}*C_{d}^{k-i}*P_{a+c-i}^{k-i}Cbi∗原创 2020-09-16 14:19:40 · 244 阅读 · 0 评论 -
AcWing 1308. 方程的解 (组合数(“隔板法“、不定方程正整数解的个数)、高精度、快速幂)
1308. 方程的解xx(mod 1000)x^x (\mod 1000)xx(mod1000)可以快速幂求出,不是重点。然后实际上就是求不定方程的正整数解的个数,运用隔板法就可以解决。最终答案Cn−1k−1C_{n-1}^{k-1}Cn−1k−1但是由于不能取模,所以还得要手写高精度。#include <stdio.h>using namespace std;const int N = 150;int k,x,f[1010][110][N];int qm(int a原创 2020-09-14 16:31:33 · 275 阅读 · 0 评论 -
ACWing 1307. 牡牛和牝牛 (组合数、DP、前缀和)
1307. 牡牛和牝牛思路一f[i]f[i]f[i]表示有iii个奶牛且最后一个牛必须为公牛的方案数。f[i]=∑0i−k−1f[i]f[i] =\sum_{0}^{i-k-1} f[i]f[i]=∑0i−k−1f[i] (s[i−k,i−1])(s[i-k,i-1])(s[i−k,i−1])只能放母牛。最终答案:∑0nf[i]\sum_{0}^{n}f[i]∑0nf[i],分类做事情,加法原理。#include <stdio.h>using namespace std;原创 2020-09-14 12:03:28 · 220 阅读 · 0 评论