- 博客(21)
- 收藏
- 关注
原创 分支限界算法(2)
例题四单源最短路径问题分支限界算法的数据结构#include#include#includeusing namespace std;class Graphic{int n;//图中顶点的个数int e;//边的数目int **adjmatrix;//邻接矩阵,存储图int *dist;//dist[n],存储单元点到其他n-1个顶点的最短路的长度int prev;//prev[...
2019-10-30 22:04:24
180
原创 第七章 分支限界算法
分支限界法类似于回溯法,是一种在问题的解空间树上搜索问题解的算法。分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。分支限界法常以广度优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导...
2019-10-30 21:22:45
297
原创 回溯算法(2)
子集和问题子集和问题的一个实例为<S,c>。其中,S={w1, w2, …, wn}是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得S1的和为c。编程任务:对于给定的正整数集合S={w1, w2, …, wn}和正整数c,编程计算S的一个子集S1,使得S1的和为c。输入对每个测试例,第一行有2个正整数n和c,n表示S的大小,c是子集和的目标值。接下来的一行,...
2019-10-28 22:15:37
200
原创 第六章 回溯算法
以深度优先的方式系统地搜索问题的解的方法称为回溯法。可以系统地搜索一个问题的所有解或任意解。有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。if (pd(a[20],a[1])) print();}elsesearch(t+1);b[i]=0;}}i...
2019-10-28 22:05:04
152
原创 贪心算法(2)
5.11 ZOJ1029-Moving Tables这层楼沿着走廊南北向的两边各有200个房间。最近,公司要做一次装修,需要在各个办公室之间搬运办公桌。由于走廊狭窄,办公桌都很大,走廊里一次只能通过一张办公桌。必须制定计划提高搬运效率。经理制定如下计划:一张办公桌从一个房间移到另一个房间最多用十分钟。当从房间i移动一张办公桌到房间j,两个办公室之间的走廊都会被占用。所以,每10分钟内,只要不...
2019-10-27 21:54:18
222
原创 第五章 贪心算法
贪心算法和动态规划算法的比较共同点:最优子结构性质是选择类最优解都具有的性质,即全优一定包含局优不同之处:在这里插入代码片贪心算法具有贪心选择特性。贪心算法求得局部最优解(局部最优,不一定是全局最优)动态规划算法从全局最优考虑问题例一:活动安排问题#includeusing namespace std;#define NUM 50void GreedySelector(int ...
2019-10-27 21:46:54
115
原创 动态规划(2)
4.5 0-1背包问题给定一个物品集合s={1,2,3,…,n},物品i的重量是wi,其价值是vi,背包的容量为W,即最大载重量不超过W。在限定的总重量W内,我们如何选择物品,才能使得物品的总价值最大。如果物品不能被分割,即物品i要么整个地选取,要么不选取;不能将物品i装入背包多次,也不能只装入部分物品i,则该问题称为0-1背包问题。如果物品可以拆分,则问题称为背包问题,适合使用贪心算法。...
2019-10-27 21:42:51
211
原创 第四章 动态规划(1)
一、动态规划的基本思想动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。我们希望找到具有最优值的解。基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。二、动态规划问题的特征动态规划算法的有效性依赖于问题本身所具有的两个重要性质:最优子结构:当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。...
2019-10-27 21:37:00
133
原创 分治策略
分治法的基本思想分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。分治法的设计思想是,将一个难以直接解决的大问题,分割成一些...
2019-10-07 19:04:02
231
原创 递归
递归的概念直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。在计算机算法设计与分析中,使用递归技术往往使函数的定义和算法的描述简洁且易于理解。递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。注意:在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口,否则将无限进行下去(死锁)。递归的缺点:递...
2019-10-07 18:58:49
140
原创 Map
它提供一对一(其中第一个可以称为key,每个关键字只能在map中出现一次,第二个可称为value)的数据处理能力,什么是一对一的数据映射?比如:一个班级中,每个学生的学号跟他的姓名就存在着一一映射的关系,这个模型用map可能轻易描述,学号用int 描述,姓名用字符串string描述,于是使用的map形式如下:map<int , string> student; ((int ,...
2019-10-07 18:49:49
115
原创 Set
内部的元素依据其值自动排序在vector,list, deque几个容器中插入数据元素时,插入的位置是确定的(最前,最后或是指定的某个位置上)而在关联容器中插入数据时,根据插入数据元素的大小确定插入的位置(根据对象所属类中定义的(重载的)比较函数)set内的相同数值的元素只能出现一次,multiset内可包含多个数值相同的元素,内部由二叉树(二叉链表,平衡二叉树,默认升序)实现,便于查找...
2019-10-07 18:48:06
84
原创 List
双向链表不提供随机存取(按顺序访问需存取的元素,O(n),),在任何位置上执行插入或删除动作都非常迅速,内部只需调整一下指针;list c0; //空链表list c1(n);list c2(n, value);list c4(c2); //建一个c2的copy链表list c5(c1.begin(),c1.end());从键盘输入10个整数,用这些整数值作为结点数据,生成一个链表...
2019-10-07 18:46:24
127
原创 STL
STL组成1)容器(Container)2)迭代器(Iterator)3)算法(Algorithm)4)函数对象Function object)5)适配器(Adaptor)6)空间配制器(allocator)容器类是容纳、包含一组元素或元素集合的对象;向量(vector)双端队列(deque)列表(list)集合(set)、多重集合(multiset)映射(map)和多重映...
2019-10-07 18:42:59
79
原创 位数问题
#includeusing namespace std;int main(){int f[1001][2],n,i,x=9;cin>>n;f[1][1]=1;f[1][0]=9;for(i=2;i<=n;i++) {if(i==n) // i是最高位x–;f[i][0]=(f[i-1][0]*x+f[i-1][1])%12345;f[i][1]=(f[...
2019-09-22 22:09:08
118
原创 吃糖果
#includeusing namespace std;int main(){int f[20] = {0};f[1] = 1; f[2] = 2;for (int i = 3; i <= 20; i++){ f[i] = f[i - 1] + f[i - 2];}int n;while (cin >> n){cout << f[n] <&l...
2019-09-22 22:06:31
87
原创 蜜蜂路线
#include #define SIZE 15001using namespace std;int f[SIZE] ;int main(){int n, m, i;cin >> m >> n;f[m]=1;f[m+1]=1;for (i = m+2; i <= n; i++)f[i] = f[i-1] + f[i-2];cout <<...
2019-09-22 22:06:00
444
原创 数字三角形逆推法
#include #include using namespace std;const int MAXN = 1005;int A[MAXN][MAXN],F[MAXN][MAXN],N;int max(int a,int b){if(a>b) return a;return b;}int main() {int i; cin >> N;for( i = ...
2019-09-22 22:05:13
255
原创 数字三角形顺推法
#include #include using namespace std;const int MAXN = 1005;int A[MAXN][MAXN],F[MAXN][MAXN],N;int main() {cin >> N;for(int i = 1;i <= N;i ++)for(int j = 1;j <= i;j ++)ci...
2019-09-22 22:04:35
76
原创 猴子吃桃
#include using namespace std;int main(){int f[11];f[10]=1;for(int i=9;i>=1;i–)f[i]=2*(f[i+1]+1);cout<<f[1]<<endl;return 0;}
2019-09-22 22:02:52
68
原创 汉诺塔递推算法
汉诺塔递归算法#include using namespace std;int main(){int f[1000]={0,1};int n;cin>>n;for(int i=2;i<=n;i++)f[i]=2*f[i-1]+1;cout<<f[n]<<endl;return 0;}
2019-09-20 09:28:07
407
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人