=====组合数学=====
林伏案
妖蛾子良多的范老爷
展开
-
uva1640(数位统计)
/* translation: 给出整数a,b。统计a和b之间的整数中,数字0,1,2,3...9出现的个数各是多少?并打印出来。 solution: 1:由于数据范围太大,直接一次统计过去肯定超时,所以解决方法是按照每1000个数划分成一个区间,依次对每个区间进行统计 累加。这样以来就能将10^8的数据量变成10^6的数据量,1s内绰绰有余。 2:定义千位及以上的为高位数,以下的为低位数原创 2016-10-09 11:26:18 · 535 阅读 · 0 评论 -
uva10820(欧拉函数,排列组合)
/* translation: 给定一个数n,任意两个元素组成的二元组(x,y).其中xy均小于n。任意两个二元组之间定不存在 (k*xi, k*yi) = (xj, yj);问这样的二元组有多少个。 solution: 排列组合,欧拉函数 满足条件的二元组的两个元素之间肯定互素,如果两个元素不互素,肯定存在一个整数k使得有二元组 (x/k, y/k)。与题意相反。所以利用欧拉函数很容原创 2016-09-26 16:47:25 · 473 阅读 · 0 评论 -
uva1262(排列计数的编码解码)
/* translation: 给出两个6行5列的矩阵,根据这两个矩阵可以推出来一个5位密码串,没一位上的字母在两个矩阵中相应的列中必须出现 求按字典序的第k个密码串是什么? solution: 排列计数的编码解码 如1,2,3,4的全排列,共有4!种,求第10个的排列是(从1计 起)? 先试首位是1,后234有3!=6种<10,说明首位1偏小,问题转换成 求2开头的第(10-6=4)原创 2016-09-27 23:39:52 · 256 阅读 · 0 评论 -
poj3252(排列组合计数,数位计数)
/* translation: 给出两个数,求这两个数形成的闭区间内round number的个数。一个数转换成二进制的时候其中0的个数比1多的 或者相等的称为round number。 solution: 排列组合。 要求闭区间内的round number个数,只需要求出0~s的个数和0~t的个数,将二者相减即可得到答案。 关于个数的计算,可以采用如下方法。当一个数为n位的二进制时,只原创 2016-10-14 21:48:17 · 428 阅读 · 0 评论 -
poj3421(多重集排列,唯一分解定理)
/* translation: 给出一个数,求能够形成的x数链最长是多少?(x数链是指以1开始,以n结尾,其中任意相邻的两个数,前面的数都能整除后面) solution: 多重集排列计数,唯一分解定理 由x数链的性质可以发现,将n分解为其质因数相乘的形式后,数链中任何一个数必定是这些质因数的某个组合,且任意相邻的2个质因数 中后面的数必定是在前面的数的质因数的组合的基础上再乘上另外的一个质原创 2016-10-27 21:05:39 · 692 阅读 · 0 评论 -
uva1638(递推关系,dp)
/* translation: 高为1...n的杆子排成一列,从左能看到l根,从右能够看到r根。求有多少排列的可能? solution: dp,递推 为了状态的转移无后效性,按照杆子的长短从小到大来排列,先排列最短的杆子。因为这样无论这个杆子放在哪里 都对后面的转态是如何转移的无任何影响。若是最短的杆子放在最右边,则接下来的状态成了dp[n-1][l][r-1] 同理,放在最左边则是d原创 2016-10-06 17:27:11 · 337 阅读 · 0 评论 -
uva12034(递推关系)
/* translation: 求n个人赛马最终名次的可能性个数除以10056的余数 solution: 递推 假设第一名有i人,既有c[n][i]种可能,接下来有f(n-i)种 故答案sum(c[n][i]*f[n-i])%10056 note: 1:求组合数c[n][m]的递推方法 2:求类似递推的题目时候,考虑分类一般是以考虑“最左”为根据来分类 date: 2016.10原创 2016-10-06 17:29:36 · 382 阅读 · 0 评论 -
uva580(递推关系)
/* translation: 有n个连续摆放的盒子,分别标记U,L。现在要求至少要有三个U摆在一起,有多少种摆法? solution: 设最左边开始的连续3个U盒子位置为i,i+1,i+2(3个连续后可能还有接着相邻的U盒子)。则左边肯定没有连续3个 的盒子的情况,为了防止前面盒子与i,i+1形成连续的3个盒子,强制让i-1为L。设f[i]为最终的答案,g[i]为i个盒子摆在一起没有原创 2016-10-06 17:31:40 · 472 阅读 · 0 评论 -
uva11464(递推关系)
/* translation: 给出一个矩阵,每个数字要么0要么是1。可以将若干个0变换成1,问最少需要多少个这样的变换才能使得矩阵变成 偶数矩阵。一个偶数矩阵里面每一个数字的上下左右数字加起来的和都是偶数。 solution: 递推 关键是找到递推关系。因为一行最多只要15个数字,所以可以暴力枚举出第一行的状态。然后根据第一行的状态其实就可以确定下一行 的状态了。进而就可以推出整个矩阵原创 2017-03-10 22:29:31 · 393 阅读 · 0 评论