
组合数学
文章平均质量分 77
自ran而然
这个作者很懒,什么都没留下…
展开
-
uva 11806 Cheerleaders 容斥原理+组合数
题目传送门:点击打开链接题目要求 矩形四个边都必须至少坐上一个人,并且 坐在矩形的一个角算相邻的两条边都有人坐,问有几种做法?我们肯定答案为0的情况:1.当k下面 我们发现 符合题意的坐法很难枚举出来,那么我们可以反着来求不符合题意的方法数。他要求边上必须有人 那么我们就可以确定一条边上没有人,正好有四条边,我们接下来再用容斥的公式就可以做了。但是本题还有一个问题,对于组合数取模的原创 2016-11-08 23:15:04 · 380 阅读 · 0 评论 -
莫比乌斯函数模版
const int maxn=1e6;const int mod=1e9+7;bool Mark[MAXSIZE];int prime[maxn];bool vis[maxn];int cnt = 0;int mu[maxn];int sum[maxn];int g[maxn];void Init(){ memset(vis,0,sizeof(vis)); mu原创 2017-07-29 20:48:48 · 388 阅读 · 0 评论 -
HDU - 4810 Wall Painting(二进制+组合数学)
题意:输出第x天 从n中选x个数进行异或的 和思路:看到异或 一般与二进制有关系 剩下就是记录二进制的个数然后用组合数学就可以搞定了代码:#include #include #define rep(i,o,u) for(int i=o;i<=u;++i)using namespace std;typedef long long ll;const int mod=1e6+3;原创 2017-04-20 18:40:31 · 402 阅读 · 0 评论 -
uva 10325 The Lottery (容斥原理)dfs枚举 或二进制枚举
题目传送门:点击打开链接题目大意:给一个整数n,再给出m个整数,求1-n中不能被这m个整数整除的个数。首先我们要知道 设 a为整数且a然后我们再利用集合的公式: 上面这两个式子都一样,接下来我们用dfs或二进制枚举A∩B∩C.......等就可以了 注:设A,B,C的公倍数c,那么A∩B∩C 其实就等于 n/c。我把dfs枚举和二进制枚举 写在一个代码里啦。原创 2016-11-07 16:57:54 · 393 阅读 · 0 评论 -
poj 3734 指数型生成函数
这道题 就是和hdu 2065 解法一样 g(x)=(1+x^2/2!+x^4/4!......)^2*(1+x+x^2/2!+x^3/3!.....)^2=([(e^(-x)+e^x)/2]^2)*e^(2*x);需要自己算出其指数生成函数中 的系数为4^(n-1)+2^(n-1),然后用快速幂计算结果即可。#include using namespace s原创 2016-11-01 21:29:39 · 1057 阅读 · 0 评论 -
hdu 1171 普通母函数
题目传送门:点击打开链接我觉得这题只要的难点在于怎么想用母函数来做这题,如果知道用母函数那么就可以用模版把所有的可能值都列出来,然后在暴力寻找就能ac了。如果还不能ac我觉得有可能你没有注意到是负数结束,不是-1结束。题目中既然说sum/2,所以我们可以枚举sum/2就可以了。。#include #include using namespace std;const int maxn=原创 2016-11-01 20:53:19 · 468 阅读 · 0 评论 -
hdu 2069 普通母函数 +dp
题目传送门:点击打开链接一开始做题并没有想到Your program should be able to handle up to 100 coins.这句话什么意思,也没有当回事。。但是wa几次,我就感觉只是套模版应该是不对的,但是又找不到,后来我在论坛上看到写着 总的硬币个数不能超过100,才知道有条件限制。但是接下来该怎么利用这条件呢?母函数模版只是能得出最后的结果,并不能求出m个硬币凑原创 2016-11-01 15:11:39 · 473 阅读 · 0 评论 -
POJ 3904 HDU 5072 容斥原理
poj 3904 点击打开链接 hdu 5072 点击打开链接poj 3904 题意 :在给出的n个数中,找出4个数 符合gcd(a,b,c,d)=1的 组数。hdu 5072 题意:再给出n 个数中,找出 3个数 符合(a,b)=(b,c)=(a,c)=1或 (a,b)!=1,(b,c)!=1,(a,c)!=1 的组数。。。总的来说 :这两题的思路 都是把这n个数原创 2016-11-29 09:35:40 · 414 阅读 · 0 评论 -
hdu 2065 指数型生成函数
题目传送门:点击打开链接这道题g(x)=(1+x^2/2!+x^4/4!......)^2*(1+需要自己算出其指数生成函数中 的系数为4^(n-1)+2^(n-1),然后用快速幂计算结果即可。原创 2016-10-31 22:30:48 · 497 阅读 · 0 评论 -
hdu 2152 普通母函数
题目传送门:点击打开链接这道题也是母函数模版题。只要懂母函数模版就应该会做。#include #include using namespace std;int n,m;int c1[110],c2[110];int a[110],b[110];void init(){ for(int i=1;i<=n;++i) cin>>a[i]>>b[i];}v原创 2016-10-31 20:58:27 · 331 阅读 · 0 评论 -
hdu 1709 普通母函数
题目传送门:点击打开链接这道题与别的母函数题不一样,利用了天平的原理,一开始只是盲目的套一下模版,但后来发现他们的重量不只是相加,也可以相减,但是我只是写出了一种相减的情况,就是利用的得出的重量减去第i种的重量,且没有写到第i种的重量减去得出的重量。。如果不懂可以看一下代码。#include #include #include using namespace std;int n;i原创 2016-10-31 18:51:49 · 377 阅读 · 0 评论 -
hdu 1085 普通母函数
题目传送门:点击打开链接这道题是母函数的一个变形,首先先确定最大值是 num1*1+num2*2+num5*5,numi代表i 的个数然后再套一下模版就可以了#include #include using namespace std;int c1[10000],c2[10000];int data[4],ans;int f[]={0,1,2,5};void solve(){原创 2016-10-31 08:27:02 · 399 阅读 · 0 评论 -
hdu 2110 普通母函数
题目传送门:点击打开链接这道题是母函数模版的变形,然后要知道不能分的情况有两种第一种就是这些资产不能拼成 总财产的1/3即c1[sum/3]=0,第二种 就是总财产不能被3整除。注意这两项就可以了#include #include using namespace std;int n;int sum;int c1[1100],c2[1100];int p[110],m[110];原创 2016-10-31 09:07:03 · 397 阅读 · 0 评论 -
hdu 1028 普通母函数
题目传送门:点击打开链接这题没啥说的,就是模版题 一点改动都没有#include using namespace std;int c1[130],c2[130];int n;void init(){ for(int i=0;i<=n;++i) c1[i]=1,c2[i]=0; for(int i=2;i<=n;++i) {原创 2016-10-30 21:19:47 · 333 阅读 · 0 评论 -
HDU 1521 排列组合
这道题主要是考查指数型生成函数:如果不懂指数型生成函数,请看点击打开链接那我就直接发我的代码了#include #include using namespace std;double f[] = {1,1,2,6,24,120,720,5040,40320,362880,3628800};int n,m;double c1[12],c2[12];int sum[12];int原创 2016-10-30 16:44:57 · 354 阅读 · 0 评论 -
HDU 2082 普通母函数
找单词Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6446 Accepted Submission(s): 4514Problem Description假设有x1个字母A, x2个字母B,....原创 2016-10-30 16:35:12 · 396 阅读 · 0 评论 -
hdu 1398 普通母函数
题目传送门:点击打开链接 这道题其实就是模版题,唯一不同的是每一项的指数不同,所以在模版里最外层的 不是i++,而是1,4,9,16....17^2,i代表的是第i种硬币类型,这种类型的硬币能提供价值为i*1,i*2,i*3。。还有不懂的可以看一下代码,如果在不懂我想你可以看一下点击打开链接的博客内容。#include #include using namespace std;int原创 2016-10-30 20:41:12 · 383 阅读 · 0 评论 -
整数拆分 生成函数 模版
int n=1e5+5,m;ll a[maxn],b[maxn];ll ans[maxn],tmp[maxn];void Init(){ int t=1000; for(int i=-1000;i<=1000;i++) tmp[i+t]=i*(3*i-1)/2; ans[0]=1; for(int i=1;i<n;i++) {原创 2017-07-28 18:17:07 · 952 阅读 · 0 评论