数学-计数
LYoGa
这个作者很懒,什么都没留下…
展开
-
UVA11806-Cheerleaders(容斥原理+二进制)
题目链接 题意:在一个m*n的矩形网格里放k个相同的石子,问有多少种方法?每个格子最多放一个石子,所有石子都要放完,并且第一行、最后一行、第一列、最后一列都得有石子。 思路:假设满足第一行没有石子的方案集为A,最后一行没有石子的方案集为B,第一列没有石子的方案集为C,最后一列没有石子的方案集为D,全集为S,则所求答案就是“在S中但不在A,B,C,D任何一个集合中”的元素个数原创 2014-09-06 15:50:37 · 917 阅读 · 0 评论 -
UVA10943- How do you add?(隔板法)
题目链接 题意:求由K个不大于N的非负整数组合而成N的方法数。 思路:隔板法。这个问题可以等价于有N个小球放入K个盒子中,盒子可以为空,问有几种放置的方法。但因为盒子为空,不符合隔板法,所以我们可以先往每个盒子里面放置一个小球,满足每个盒子都不为空的,等分完后,在每个盒子减去一个小球。所以就相当与将N + K - 1个小球分为K - 1份。之后就是组合数学的问题了。原创 2014-09-10 11:11:33 · 1086 阅读 · 0 评论 -
UVA10892 - LCM Cardinality(分解质因子)
题目链接 题意:输入正整数n,统计有多少对正整数a 思路:分解质因子,然后直接暴力求出对数 代码: #include #include #include #include #include using namespace std; typedef long long ll; const int MAXN = 1000; ll arr[MAXN];原创 2014-09-11 19:43:44 · 1053 阅读 · 0 评论 -
UVA11609 - Teams(组合数学+快速幂)
题目链接 题意:从N个人中选出K个人为一只队伍(1 思路:依题目可得ans = sum(i * C(i, n)),化简可得ans = n * sum(C(i, n - 1)) = n * 2 ^ (n - 1)。之后用快速幂求解。 代码: #include #include #include #include #include typedef long原创 2014-09-11 20:57:54 · 986 阅读 · 0 评论 -
UVA11038- How Many O's?(组合数学)
题目链接 题意:求出在a到b之间的数中,有多少个0。 思路:组合数学问题。可以枚举每个位置上的数i,假设i之前的数为left,后面的为right,后面有num位数。当i != 0时,将i置为0,所以组合数为left * 10^num(后面的位数,每一位有10种选择),当i = 0时,当前面取[1, left - 1]时,保证组合的数一定小于原来的数,所以后面的可以取10^n原创 2014-09-17 10:30:30 · 1070 阅读 · 0 评论