- 博客(8)
- 资源 (2)
- 收藏
- 关注
原创 集合最大元问题
题目:在规模为n的数据元素集合中找出最大元。当n=2时,一次比较就可以找出两个数据元素的最大元和最小元。当n>2时,可以把n个数据元素分为大致相等的两半,一半有n/2个数据元素,而另一半有n/2个数据元素。 先分别找出各自组中的最大元,然后将两个最大元进行比较,就可得n个元素的最大元代码:#include using namespace std;const int maxn=10
2017-09-29 17:05:23 1305
原创 合并排序问题
题目:对n个元素组成的序列进行排序。基本思想:将待排序元素分成大小大致相同的两个子集合,分别对两个集合进行排序,最终将排序好的子集合合并成所要求的排好序的集合。代码:#include using namespace std;void Copy(int *a,int *b,int left,int right){ for(int i=left; i<=right; i
2017-09-29 17:04:32 859
原创 最优二叉搜索树 (dp)
题目:给n个节点以及每个节点的将要被查询的概率pi,然后把它补充成一个满二叉树,用来补充的节点有n+1个,即di ,每个 di 也有一个查询的概率 qi 。构造最优的二叉搜索树,使总的查询次数最少。最优二叉搜索树:我的理解是,必须保持原二叉树的中序遍历序列不变的前提下,通过将大概率节点尽量排到接近根的位置,使得总查询次数最少的树。它根哈夫曼编码有相似之处,就是贪心的使大概率节点接近树根,但
2017-09-29 12:52:21 645
原创 矩阵连乘问题(dp)
题目:计算矩阵连乘积A1,A2,...,An,其中Ai的维度为p[i-1]*p[i]。输入规模n,p[0]~p[n],输出最少乘的次数和断点处也就是乘法顺序。思路:区间dp,m[i][j]表示从Ai到Aj区间内的最少乘的次数,枚举k(i用s[i][j]记录每次最少次数的时候是在哪个地方断开,即k的位置。详见代码。代码:#include using namespace s
2017-09-21 21:57:48 624
原创 nlogn的二维最接近点对问题(分治)
题目:在二维平面上的n个点中,快速的找出最近的一对点。思路:分治,把平面上所有点按照x从小到大排序,分成两个集合,分别求出两个集合内的最接近点对,然后是这两个集合之间的最接近点对,二者取最小值则是整个问题的最终解。通过不断地递归分治,最终的状态只可能是只有两个点或者是只有三个点求最接近点对,也就是该问题的最小子问题,关键是在两个集合中与集合之间最接近点对的比较,详见代码。代码:
2017-09-19 21:02:20 1128
原创 循环赛日程表(分治)
题目:有n=2^k个远动员选手,设计比赛日程表实现:(1)每个选手必须与n-1个选手比赛(2)每个选手一天只比赛一场(3)比赛共进行n-1天题意:略。思路:把n个选手分成两组,每组内进行比赛安排,每组内的安排又要继续分成两组,直到组内仅有两人,那么就是安排这两个人进行比赛,这也就是最小子问题。用递归直到最底层设初值,逐层赋值,二维数组打出表来。代码:#inc
2017-09-18 16:49:53 974
原创 HDU 6186 CS Course(位运算 思维)
题目:点击打开链接题意:给你n个数,q次查询,每次查询的输出为去掉第q个数之后的n-1个数的与运算、或运算、异或运算结果。思路:首先异或运算的特征,边读入边异或,最后查询哪个在与之异或即可;对于与运算,想到多个二进制数相与,只要某个数的某一位上是0,与运算的结果该位上的数为0,所有数的该位上的数都为1时结果才为1;对于或运算,只要某个数的某一位上的数为1,结果为1,所有数该位为
2017-09-16 10:30:35 419
原创 HDU 4472 count(递推)
题目:点击打开链接题意:构造一棵树,这棵树的每一层中的节点所拥有的子节点数相等,问有多少种构造方法。思路:对称性。根据题意,可以想到,把这棵树从中间劈开,两边一定是对称的,继续劈开左右两边的子树,依然对称。用a[i]表示节点数为 i 的树的构造方法数,a[j]表示节点数为 j 的树的构造方法数,其中 j 代码:#include using namespace std;cons
2017-09-16 10:13:29 296
封装好的通用DAO实用型工具
2018-06-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人