大二下学期
Eric_Tseng
https://github.com/Questzzq
展开
-
最大子段和
(1)分治法:#include <iostream>#include <cstdio>#define maxn 1001using namespace std;int a[maxn];int MaxSubSum(int *a, int left, int right) { int sum = 0; if(left == right) return a[...原创 2018-06-07 22:39:04 · 173 阅读 · 0 评论 -
汉诺塔问题
Hanoi(int n, char A, char B, char C): 在A塔上有n个圆盘,通过B塔转移到C塔上,并且最终圆盘在C塔的顺序与原先在A塔上的一致。附上代码:#include <cstdio>using namespace std;int count;void Hanoi(int n, char a, char b, char c) { count ++...原创 2018-06-06 21:01:16 · 153 阅读 · 0 评论 -
整数划分问题
记:IntPartition(n,m)为:在正整数的所有不同划分中,最大加数不超过m的划分个数。(1)当n=1时, 无论m取什么值,只有一种{1}一种划分(2)当m=1时,只有n个1一种划分(3)当n<m时,因为划分时候不会出现负数和0的情况,所以相当于IntPartition(n,n)(4)当n=m时,将其分为是否包含n的情况 ①当划分中包含n时,显然IntPartition...原创 2018-06-06 20:02:16 · 195 阅读 · 0 评论 -
递推法产生二进制格雷码 Binary Gray Code
算法问题描述:在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。所以,在实现的时候,我们可以利用递归,在每一层前面加上0或者1,然后就可以列出所有的格雷码。比如:第一步:产生 0, 1 两个字符串。第二步:在第一步的基础上,每一个字符串都加上0和1,但是每次只能加...原创 2018-04-29 02:26:14 · 635 阅读 · 0 评论 -
杭电ACM hdu 1171 Big Event in HDU 解题报告(母函数)
Problem DescriptionNowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don’t know that Computer College had ever been split into Computer College and Software ...原创 2018-04-14 00:30:43 · 178 阅读 · 0 评论 -
分治思想的应用: C++实现快速排序和随机化的快速排序
快速排序算法是基于分治策略的另一个排序算法。它的基本思想是、:(1)分解(divide):以数组a[p,r ]中的某一个数a[q]将数组分成三部分:a[1...q-1] a[q] a[q+1...r]。其中a[1...q-1]中的任何一个数都比a[q]小,而a[q+1...r]中的任何一个数都比a[q[]大。下标q在划分过程中确定。(2) 递归求解(conquer):通过递归调用快速排序算法分别对...原创 2018-04-05 10:44:09 · 912 阅读 · 0 评论 -
【排序算法】归并排序(C++实现)
转自jimye原创博客,出处链接:https://blog.csdn.net/left_la/article/details/8656953个人加了些注释归并排序是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。常见的归并排序有两路归并排序(Merge Sort),多相归并排序(Polyphase Merge Sort),Strand排序(Strand Sort)。...转载 2018-04-03 23:24:02 · 19465 阅读 · 0 评论 -
动态规划之最长递增子序列LIS
子序列: 一个序列 S: { n1 n2 n3 ... ni },任意删除若干项,剩余的序列叫做S的一个子序列。也可以认为是从序列S按原顺序保留任意若干项得到的序列。现在我们要求解一个数组里最长递增子序列的长度。在此我提出两种方法,并且附上代码。解决方法:(1)利用动态规划求解两个数组的最长哦公共子序列来求解这种题目,但只适用于求解最长递增子序列的长度。思想:输入数组a[ ],把a[ ]原封不动地...原创 2018-04-09 10:18:35 · 270 阅读 · 0 评论 -
动态规划之最长公共子序列LCS
有两个数组a[ ],b[ ],若他们去掉某些元素之后,剩下的元素集合S全等,则S称为a[ ]和b[ ]的公共子序列,可能有多个集合S1,S2,...SN,称其中元素个数最长的集合为a[ ]和b[ ]的最长公共子序列。我们定义dp[ i ][ j ]表示a[1~i ]和b[1~j ]的最长公共子序列的长度,则:(1) 如果a[ i ]==a[ j ],那么a[ i ]和b[ j ]是dp[ i ][...原创 2018-04-08 02:06:12 · 210 阅读 · 0 评论 -
二叉树的前序递归建立和中序递归打印
#include <bits/stdc++.h>using namespace std;typedef struct node { char key; struct node *lchild; struct node *rchild;}node, *Tree;void creat(Tree &root) { char tmpchar;...原创 2018-06-14 20:00:36 · 383 阅读 · 4 评论