摘要: 问题描述如下:一个具有n个元素的排列,经过k趟bubblesort排到有序状态。求出满足此条件的排列个数。首先,了解反序表的概念。《计算机程序设计艺术》第三卷5.1.1反序部分有说明。简述如下:a1,a2,...,an是集合{1,2,...,n}的一个排列。令bj为位于j左边但是大于j的元素个数,就能得到排列a1,a2,...,an的反序表b1,b2,...,b3。比如说:排列591826473有反序表位置:123456789b236402210不管什么样子的排列,只要可以比较大小,就可以映射到集合{1,2,...,n}上的一个排列。不难发现,每一趟bubblesort,都会将这一趟之前反序数 阅读全文
posted @ 2012-08-13 16:19 wutaoKeen 阅读(224) 评论(0) 推荐(0)
摘要: 简单的组合题:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>#include<string>#define LL long longusing namespace std;LL 阅读全文
posted @ 2012-08-13 10:40 wutaoKeen 阅读(125) 评论(0) 推荐(0)
摘要: 这是一道对斯特林数的运用:s[n][k] = s[n-1][k-1] + k*[n-1][k];View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include<cstring>#include<vector>#include<string># 阅读全文
posted @ 2012-08-13 10:11 wutaoKeen 阅读(196) 评论(0) 推荐(0)
摘要: 一道简单的组合数学题,我们把从1~m的和的余数相同的放在一个集合里面,那么他们任意一个相减就会是得到余数为0;那么也是d的倍数;这里要注意的是当余数为0的集合那么可以从中任意选2个与1个,这个题会超出int型:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<set>#include<map>#include< 阅读全文
posted @ 2012-08-13 09:09 wutaoKeen 阅读(198) 评论(0) 推荐(0)