学组合数学心得与题解(一)——组合计数
今天我在某网站上稍微学习了一下组合数学,准确来讲,今天就看了看组合计数。像一些弱智的排列数、组合数大家肯定在小学奥数就已经精通了(只有我这种蒟蒻忘的精光)。当然,博主比较菜,连二项式定理、帕斯卡恒等式都不会,所以今天只能恶补一下啦。
排列数与组合数大家一定都十分的明白了,所以我在这里也不多说了。
然后二项式定理以及帕斯卡恒等式就是俩公式,自己看看就好了。
今天我做了两道题(貌似特别菜,专适我这种蒟蒻):
1.
解析:这道题看起来十分菜,直接用二项式定理就好了,把px和qy看成一个整体就好。但是写组合数的函数时千万不要直接搞或者用递归,不然。。。就会像我一样超时n次,最好直接用帕斯卡恒等式递推预处理出每组组合数的值(不要忘了边加边取模哦)
代码:
#include <bits/stdc++.h>
using namespace std;typedef long long LL;
typedef double DB;const int MOD = 1e4 + 7;int Max(int a, int b){return a > b ? a : b;}
int Min(int a, int b){return a < b ? a : b;}int C(int n, int r){//cout<<n<<" "<<r<<endl;int ans = 0;if(r == 0) return 1;else if(n == r) return 1;else {if(r > n / 2 + 1) r = n - r;ans = ((C(n - 1, r - 1) % MOD) + C(n - 1, r)) % MOD;return ans;}
}int qpow(int l, int r){int res = 1;while(r){if(r & 1) res = res * l % MOD;l = l * l % MOD;r >>= 1;}return res;
}int C1(int m, int k){ int count = 0;for(int i = m; i >= k; i --){if (k > 1) C1(i - 1, k - 1);else count ++;}return count;
}inline int read(){int r = 0, z = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-') z = -1; ch = getchar();}while(ch >= '0' && ch <= '9'){r = r * 10 + ch - '0'; ch = getchar();}return r * z;
}
void fre(){freopen(".in", "r", stdin);freopen(".out", "w", stdout);
}
void init(){int p = read(), q = read(), k = read(), a = read(), b = read();int ans = ((C1(k, b) * qpow(p, a)) % MOD * qpow(q, b)) % MOD;int ans1 = qpow(p, a) * qpow(q, b);cout<<ans<<endl;}
int main(){//fre();init();return 0;
}
2.
样例输入1:
5 2
1 2 3 4 5
样例输出1:
40
解析:这道题其实也是很简单的,只要仔细一想,就能知道正解。
我们首先先把这一列数从大到小排序,然后和最大的数在一组的k个数,其辣度值就是其本身,如果这k个数中定了这个最大的数,可以在n-1个数中调出k-1个数与这个最大的数组成一组,这样的方案数是C(n−1,k−1)C(n - 1, k - 1),总辣度值就是C(n−1,k−1)×最大的数a[1]C(n - 1, k - 1)\times最大的数a[1]。
我们再找到次大的数。这是我们排除最大的数,从剩下的n-2个数中调出k-1个数与这个次大的数组成一组,这时所组成的组的辣度值都是这个次大的数这样的总方案数是C(n−2,k−1)C(n - 2, k - 1),总辣度值是C(n−2,k−1)×次大的数a[2]C(n - 2, k - 1)\times次大的数a[2]。
以此类推,建议中间值开个long long,要不然有可能WA掉。
代码:
#include <bits/stdc++.h>
using namespace std;typedef long long LL;
typedef double DB;const int MAXN = 1e5 + 30;
const int MOD = 1e9 + 7;int c[MAXN][61], a[MAXN];int Max(int a, int b){return a > b ? a : b;}
int Min(int a, int b){return a < b ? a : b;}void C(int n, int k){c[0][0] = 1;for(int i = 1; i <= n; i ++){c[i][0] = 1;for(int j = 1; j <= Min(k, i); j ++)c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % MOD;}
}int cmp(int x, int y){return x > y;}inline int read(){int r = 0, z = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-') z = -1; ch = getchar();}while(ch >= '0' && ch <= '9'){r = r * 10 + ch - '0'; ch = getchar();}return r * z;
}void fre(){freopen(".in", "r", stdin);freopen(".out", "w", stdout);
}
void init(){int n = read(), k = read();LL ans = 0;C(n, k);//out<<c[9][9]<<endl;for(int i = 1; i <= n; i ++) a[i] = read();sort(a + 1, a + n + 1, cmp);//cout<<a[1]<<endl;for(int i = 1; i <= n - k + 1; i ++){ans = (ans + (LL)c[n - i][k - 1] * a[i]) % (LL)MOD;}printf("%lld\n", ans);
}
int main(){//fre();init();return 0;
}
学组合数学心得与题解(一)——组合计数相关推荐
- 解题报告(五)组合计数(ACM / OI)超高质量题解
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 解题报告(二)E、(BZOJ3513) [MUTC2013] idiots(生成函数 + FFT + 组合计数)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 【Luogu4921】情侣?给我烧了!(组合计数)
[Luogu4921]情侣?给我烧了!(组合计数) 题面 洛谷 题解 很有意思的一道题目. 直接容斥?怎么样都要一个平方复杂度了. 既然是恰好\(k\)对,那么我们直接来做: 首先枚举\(k\)对人出 ...
- CF1237F Balanced Domino Placements(组合计数,dp)
CF1237F Balanced Domino Placements Solution 显然可以先考虑横着的骨牌,再考虑竖着的骨牌.但是思路卡在了选取横着的骨牌会对竖着的骨牌的相邻对数产生影响. 然而 ...
- 大学计算机课感悟100字,停课不停学的心得100字 停课不停学的感想
提到停课不停学的心得100字-你怎样做好停课不停学作文200字,相信大家对停课不停学的感想非常感兴趣,许多人想知道停课不停学,小学电子教材与<课时学练测>教辅和停课不停学的心得100字-你 ...
- 1307 牡牛和牝牛(组合计数-递推)
1. 问题描述: 约翰要带 N 只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排,但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有 K 只牝牛.请计算 ...
- 基础组合计数常用的概念和方法总结
基础组合计数常用的概念和方法总结 一.组合计数中的基本概念与性质 1.排列 定义 性质 2.组合 定义 性质 二.组合计数中的一些常用技巧 1.容斥原理 定义 公式 2.捆绑与插空法 捆绑法 插空法 ...
- 数学知识——组合计数
组合计数 文章目录 组合计数 概述 动态规划 牡牛和牝牛 思路 代码 隔板法 方程的解 思路 代码 序列统计 思路 代码 加法 & 乘法原理 加法原理 乘法原理 车的摆放 思路 代码 容斥原理 ...
- CodeForces 997C-Sky Full of Stars〖容斥定理+组合计数〗
网页链接:传送门 C. Sky Full of Stars time limit per test : 4 seconds memory limit per test : 256 megabytes ...
最新文章
- linux学习笔记十二:yum常用命令
- 微信小程序工具真机调试提示page xxx/xxx/xxx is not found
- HDU Senior's Gun (水题)
- ivx中字体显示_iVX云服务费用优化 · 上篇
- linux 喂狗时间,狗狗正确喂食时间表,喂狗最佳时间指南
- Object类的使用,包装类的使用
- 理解 LSTM 及其图示
- Spark SQL自定义函数案例(拼接字符串)
- xml测试_规范的XML测试
- Access2016学习8
- 聊聊北京大部分前端从业者所面临的困境
- 《程序员的职业素养》读书笔记万字总结【建议收藏】
- D3入门教程——坐标轴
- AutoCAD无法显示虚线的解决方法
- 用微信h5棋牌源码来测量相机到目标的距离
- WRF实例运行系列(1)
- Python 模块简介 -- warnings
- python中将字符变为大写_python3 数字转人民币大写
- Java编程序哥德巴赫猜想
- CEVA-Xx_V17.1.0_64b安装步骤
热门文章
- 查看数据库的版本命令
- JAVA java学习(2)——————java下载安装与环境配置
- matlab求偏微分方法解析解,偏微分数值解(2,MATLAB求解方法)学案.ppt
- 项目开发中软件测试有哪些工作?
- html大作业网页代码 html期末作业代码网页设计——食品网5页面模板 HTML+CSS+JavaScript 学生DW网页设计作业成品
- matlab中画的图导出高分辨率图片的方法
- 某网友惊现言论:程序员没有技术壁垒,不值得拿高薪!网友:搞笑!
- Win7企业版安装vs2013
- oralce的时间戳数据同步到hive报脏数据错误
- IP地址管理工具Netbox 安装指南