随笔分类 -  组合 --- 排列与组合-1公式

POJ 1850 Code
摘要://这题和上题没什么区别// 就是数据大了点而已// 直接参考上题 http://www.cnblogs.com/372465774y/p/3604095.html#include #include #include#include #include #include #include #include using namespace std;#define LL long longLL C[40][40];int dp[40];void init(){ int i,j; for(i=0;i0) { index--; lf='z'-str[index]... 阅读全文

posted @ 2014-03-16 22:55 江财小子 阅读(117) 评论(0) 推荐(0)

POJ 1496 Word Index
摘要:// 给你一个字符串 看下是否符合里面字符都是递增的// 如果是,那么求出他的编号// a是1号 ab是27号 .... 以此类推// 思路:给你的串长n 求长度为 1,2...n-1的合法串个数 C[26][1]+C[26][2]+...+C[26][n-1]// 求长度为n的串在同等长度里面排第几// 然后就OK了#include #include #include#include #include #include #include #include using namespace std;#define LL long longint C[40][40];int dp[40];vo.. 阅读全文

posted @ 2014-03-16 22:47 江财小子 阅读(315) 评论(0) 推荐(0)

POJ 3252 Round Numbers
摘要:// 求区间 [s,f]中有几个数在二进制表示下0的个数// 转化成求 0到某个值里面有多少这样的数// n二进制有m位 先求 1,2,3...m-1位二进制数里面有多少个符合// 再求n位里面比n小的二进制数里面有几个符合// 具体就是 将n写成二进制 从高位(m-1位)往地位枚举// 如果该位是1 则改成0 求剩下位数里面满足的情况总数// 如果该位是0 则不变 继续往下#include #include #include#include #include #include #include #include using namespace std;#define LL long lon. 阅读全文

posted @ 2014-03-16 21:25 江财小子 阅读(199) 评论(0) 推荐(0)

POJ 1942 Paths on a Grid
摘要:// n*m 的格子 从左下角走到右上角的种数// 相当于从 n+m 的步数中选 m 步往上走// C(n+m,m) #include #include #include#include #include #include #include #include using namespace std;#define LL long longLL C(LL n,LL k){ LL m=1; if(k>n/2) k=n-k; // 不加这句会超时 比如C[10^9][10^9 - 1] int i; for(i=1;i<=k;i++) { m*=(n-i+... 阅读全文

posted @ 2014-03-16 12:27 江财小子 阅读(231) 评论(0) 推荐(0)

POJ 1306 Combinations
摘要:// 求 C[n][m]// 组合公式 C[i][j]=C[i-1][j-1]+C[i-1][j];#include #include #include#include #include #include #include #include using namespace std;#define LL long longLL C[123][123];int main(){ int i,j; for(i=0;i<=100;i++) C[i][0]=1; for(i=1;i<=100;i++) for(j=1;j<=i;j++) C[i][j]=C[i-1][j-... 阅读全文

posted @ 2014-03-16 12:04 江财小子 阅读(286) 评论(0) 推荐(0)

POJ 2249 Binomial Showdown
摘要:// n 个 数 取 k个数的取法// C(n,k) 注意些细节#include #include #include#include #include #include #include #include using namespace std;#define LL long longLL C(int n,int k){ LL m=1; if(k>n/2) k=n-k; // 不加这句会超时 比如C[10^9][10^9 - 1] int i; for(i=1;i<=k;i++) { m*=(n-i+1); m/=i; } r... 阅读全文

posted @ 2014-03-16 11:50 江财小子 阅读(375) 评论(0) 推荐(0)

hdu 1799 循环多少次?
摘要:循环多少次?Time Limit: 3000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1686Accepted Submission(s): 603Problem Description我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分。例如,如果代码中出现for(i=1;i#include #include using namespace std;int dp[2003][2003];void set(){ int i,j; for(i=1;i&l 阅读全文

posted @ 2012-07-22 20:18 江财小子 阅读(386) 评论(0) 推荐(0)

康托逆展开和康托展开的逆运算
摘要:百度百科有一些说明 但很难看懂 我尽可能用简单的语言来说明学会使用康托展开后就能方便地解决一系列的问题一、康托展开对于一个集合{1,2,3,4,...,n}的从小到大排序(或者从大到小,与从小到大类似,这里只说前者)的全排列 显然它有n!项用自然数1,2,...,n!与之一一对应,这是一种对应法则。这个法则理解起来并不容易,还是用一些例子来说明吧例1 {1,2,3,4,5}的全排列,并且已经从小到大排序完毕(1)找出45231在这个排列中的顺序比4小的数有3个比5小的数有4个但4已经在之前出现过了所以是3个比2小的数有1个比3小的数有两个但2已经在之前出现过了所以是1个比1小的数有0个那么45 阅读全文

posted @ 2012-04-23 22:51 江财小子 阅读(245) 评论(0) 推荐(0)