算法设计与分析
Laura2017
这个作者很懒,什么都没留下…
展开
-
多机调度问题
多机调度问题要求给出一种作业调度方案,使所给的n个作业在尽可能短的时间内由m台机器加工处理完成。约定:每个作业均可在任何一台机器上加工处理,但未完工前不允许中断处理。作业不能拆分成更小的子作业。这个问题是NP完全问题,到目前为止还没有有效的解法。对于这一类问题,用贪心选择策略有时可以设计出较好的近似算法。 采用最长处理时间作业优先的贪心选择策略可以设计出解多机调度问题的较好的近似算...原创 2018-10-26 22:01:44 · 1286 阅读 · 0 评论 -
凸多边形的最优三角划分
问题相关定义:(1)凸多边形的三角剖分:将凸多边形分割成互不相交的三角形的弦的集合T。 (2)最优剖分:给定凸多边形P,以及定义在由多边形的边和弦组成的三角形上的权函数w。要求确定该凸多边形的三角剖分,使得该三角剖分中诸三角形上权之和为最小。 凸多边形三角剖分如下图所示: 相关性质在凸多边形P的一...转载 2018-10-20 00:20:33 · 4868 阅读 · 0 评论 -
最长公共子序列
在两个字符串中,有些字符会一样,可以形成的子序列也有可能相等,因此,长度最长的相等子序列便是两者间的最长公共字序列,其长度可以使用动态规划来求。以s1={1,3,4,5,6,7,7,8},s2={3,5,7,4,8,6,7,8,2}为例。借用《算法导论》中的推导图:创建 DP数组C[][]; &n...转载 2018-10-19 22:06:20 · 211 阅读 · 0 评论 -
独轮车
时限:1000ms 内存限制:10000K 总时限:3000ms描述独轮车的轮子上有红、黄、蓝、白、绿(依顺时针序)5种颜色,在一个如下图所示的20*20的迷宫内每走一个格子,轮子上的颜色变化一次。独轮车只能向前推或在原地转向。每走一格或原地转向90度均消耗一个单位时间。现给定一个起点(S)和一个终点(T),求独轮车以轮子上的指定颜色到达终点所需的最短时间。 输入本题包含一个...原创 2018-10-16 23:36:24 · 525 阅读 · 0 评论 -
跳马
时限:1000ms 内存限制:10000K 总时限:3000ms描述在国际象棋中,马的走法与中车象棋类似,即俗话说的“马走日”,下图所示即国际象棋中马(K)在一步能到达的格子(其中黑色的格子是能到达的位置)。现有一200*200大小的国际象棋棋盘,棋盘中仅有一个马,给定马的当前位置(S)和目标位置(T),求出马最少需要多少跳才能从当前位置到达目标位置。输入本题包含多个测例。输入...原创 2018-10-16 23:26:02 · 243 阅读 · 0 评论 -
电子老鼠闯迷宫
时限:1000ms 内存限制:10000K 总时限:3000ms描述有一只电子老鼠被困在如下图所示的迷宫中。这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路。电子老鼠可以在路上向上、下、左、右行走,每一步走一个格子。现给定一个起点S和一个终点T,求出电子老鼠最少要几步从起点走到终点。输入本题包含一个测例。在测例的第一行有四个由空格分隔的整数,分别表示起点的坐标...原创 2018-10-16 23:21:44 · 243 阅读 · 0 评论 -
加1乘2平方
时限:1000ms 内存限制:10000K 总时限:3000ms描述最简单的队列的使用#include <iostream>#include <queue>using namespace std;queue<int> q1;int main(){int temp, x;q1.push(5);//入队q1.push(8);//入队te...原创 2018-10-16 23:18:23 · 497 阅读 · 0 评论 -
动态规划矩阵连乘问题
问题描述:给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2...,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。 问题解析:由于矩阵乘...转载 2018-10-18 22:03:55 · 2552 阅读 · 0 评论 -
八数码
时限:5000ms 内存限制:20000K 总时限:10000ms描述:在九宫格里放在1到8共8个数字还有一个是空格,与空格相邻的数字可以移动到空格的位置,问给定的状态最少需要几步能到达目标状态(用0表示空格):1 2 34 5 67 8 0输入:输入一个给定的状态。输出:输出到达目标状态的最小步数。不能到达时输出-1。输入样例:1 2 34 0 67 5...原创 2018-10-18 14:52:46 · 8054 阅读 · 0 评论 -
木乃伊迷宫
时限:1000ms 内存限制:10000K 总时限:3000ms描述:木乃伊地下宫殿是一个6行6列的迷宫。作为敢到木乃伊地下宫殿里去探险的你,有没有跟木乃伊抓迷藏的心理准备呵!游戏在木乃伊所在的迷宫里展开,任务就是尽快赶到出口。你一次只能走一步,而木乃伊可以走两步,但木乃伊是很笨的,他总是先尽量跟你达到同一列,如果已经是同一列了,他才会像你走来,有墙的地方人和木乃伊都不能过,你可以利用障碍...原创 2018-10-18 14:51:45 · 380 阅读 · 0 评论 -
推箱子
时限:1000ms 内存限制:10000K 总时限:3000ms描述:绝大多数人都玩过推箱子的游戏,控制一个人将箱子推动到目标位置即获得胜利。现请你编写一个程序,判断将箱子推到目标位置至少需要多少步。输入:推箱子的平面区域为固定大小(10*10),使用10行10列输入推箱子的初始局面。其中,0代表空格,1代表墙,2代表箱子,3代表目标位置,4代表人。注:游戏中只有一个箱子,一个目...原创 2018-10-18 14:50:42 · 746 阅读 · 0 评论 -
动态规划电路布线问题
1、问题描述: 在一块电路板的上、下两端分别有n个接线柱。根据电路设计,要求用导线(i,π(i)) 将上端接线柱i与下端接线柱π(i)相连,如下图。其中,π(i),1≤ i ≤n,是{1,2,…,n}的一个排列。导线(I, π(i...转载 2018-10-21 18:05:45 · 1277 阅读 · 1 评论 -
花生米系列
花生米(二)时限:1000ms 内存限制:10000K 总时限:3000ms描述:五一长假第二天,Tom和Jerry在仓库散步的时候又发现了一堆花生米(这个仓库还真奇怪)。这次Tom制定分花生米规则如下: 1、Tom和Jerry轮流从堆中取出k粒花生米吃掉,k可以是1,5,10中的任意一个数字; 2、为显示规则的公平性,Jerry可以选择先取或者后取。Je...原创 2018-10-26 21:05:26 · 689 阅读 · 0 评论 -
用弗洛伊德算法求赋权图的两点间的最短路径的长度
Description用弗洛伊德算法求任意两点间的最短路径的长度Input先输入一个小于100的正整数n,然后输入图的邻接矩阵(10000表示无穷大,即两点之间没有边),之后再输入一个小于100的正整数m,最后的m行每行输入两个不同的0到n-1之间的整数表示两个点。Output用弗洛伊德算法求任意两点间的最短路径的长度,并输出这些两个点之间的最短路径的长度。 Sample...原创 2018-05-23 23:47:00 · 1400 阅读 · 0 评论 -
用迪杰斯特拉算法求赋权图中的最短路径
Description用迪杰斯特拉算法求一点到其余所有结点的最短路径。Input先输入一个小于100的正整数n,然后输入图的邻接矩阵(10000表示无穷大,即两点之间没有边),最后输入两个0到n-1的整数表示两个点。Output先用迪杰斯特拉算法求给定的第一个点到其余所有结点的最短路径。然后再输出给定的两个点之间的最短路径(按顺序输出最短路径上的每一个点,每个数据占一行)。...原创 2018-05-21 23:20:21 · 2102 阅读 · 1 评论 -
图的最小生成树:Prim算法和Kruskal算法
1. 图的最小生成树生成树的定义:如果连通图G的一个子图是一棵包含G的所有顶点的树,则该子图称为G的生成树。 生成树是连通图的包含图中的所有顶点的极小连通子图。它并不唯一,从不同的顶点出发进行遍历,可以得到不同的生成树。其中,权值最小的树就是最小生成树。关于最小生成树最经典的应用模型就是城市通信线路网最小造价的问题:网络G表示n个城市之间的通信线路(其中顶点表示城市,边表示两个城市之...原创 2018-06-22 21:33:44 · 1327 阅读 · 0 评论 -
滑雪
时限:1000ms 内存限制:10000K 总时限:3000ms描述:Michael喜欢滑雪这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子1 2 3 4 516 17 18 19 615...原创 2018-10-26 21:33:48 · 224 阅读 · 0 评论 -
装盘子
时限:1000ms 内存限制:10000K 总时限:3000ms描述:N人为了大快朵颐,行至云餐二楼,取了N个盘子,打了M个饺子。现欲将M个饺子装入N个盘子中,试问共有多少种不同的装法?假设盘子足够大,并且盘子里可以什么都不放。注意像2 5 0和5 0 2之类的属于同一种放法。输入:两个整数M、N(1=< M,N <=100)以空格隔开。输出:单独一行输出共有...原创 2018-10-26 21:22:57 · 472 阅读 · 0 评论 -
旅游预算
时限:1000ms 内存限制:10000K 总时限:3000ms描述:一个旅行社需要估算乘汽车从某城市到另一城市的最小费用,沿路有若干加油站,每个加油站收费不一定相同。旅游预算有如下规则:若油箱的油过半,不停车加油,除非油箱中的油不可支持到下一站;每次加油时都加满;在一个加油站加油时,司机要花费2元买东西吃;司机不必为其他意外情况而准备额外的油;汽车开出时在起点加满油箱;计算精确到分(1元...原创 2018-10-26 21:21:43 · 1139 阅读 · 0 评论 -
石子合并
时限:1000ms 内存限制:10000K 总时限:3000ms描述:在一个圆形操场的四周摆放着n堆石子(n<= 100),现要将石子有次序地合并成一堆。规定每次只能选取相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。编一程序,读入石子堆数n及每堆的石子数(<=20)。选择一种合并石子的方案,使得做n-1次合并,得分的总和最小;比如有4堆石子:4 4 5 9...原创 2018-10-26 21:14:02 · 504 阅读 · 0 评论 -
计算矩阵连乘积
时限:1000ms 内存限制:10000K 总时限:3000ms描述:在科学计算中经常要计算矩阵的乘积。矩阵A和B可乘的条件是矩阵A的列数等于矩阵B的行数。若A是一个p×q的矩阵,B是一个q×r的矩阵,则其乘积C=AB是一个p×r的矩阵。计算C=AB总共需要p×q×r次乘法。现在的问题是,给定n个矩阵{A1,A2,…,An}。其中Ai与Ai+1是可乘的,i=1,2,…,n-1。要求计算...原创 2018-10-26 21:12:52 · 1282 阅读 · 0 评论 -
田忌赛马
时限:1000ms 内存限制:10000K 总时限:3000ms描述:田忌与齐王赛马,双方各有n匹马参赛(n<=100),每场比赛赌注为1两黄金,现已知齐王与田忌的每匹马的速度,并且齐王肯定是按马的速度从快到慢出场,现要你写一个程序帮助田忌计算他最好的结果是赢多少两黄金(输用负数表示)。Tian Ji and the king play horse racing, both sid...原创 2018-10-26 21:11:36 · 1275 阅读 · 0 评论 -
防卫导弹
时限:1000ms 内存限制:10000K 总时限:3000ms描述:一种新型的防卫导弹可截击多个攻击导弹。它可以向前飞行,也可以用很快的速度向下飞行,可以毫无损伤地截击进攻导弹,但不可以向后或向上飞行。但有一个缺点,尽管它发射时可以达到任意高度,但它只能截击比它上次截击导弹时所处高度低或者高度相同的导弹。现对这种新型防卫导弹进行测试,在每一次测试中,发射一系列的测试导弹(这些导弹发射的间...原创 2018-10-26 21:09:07 · 350 阅读 · 0 评论 -
背包问题和装载问题
背包问题描述:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,…,wn,希看从N件物品中选择若干物品,所选物品的重量之和恰能放进该背包,即所选物品的重量之和即是S。代码;#include <iostream>#include <stdlib.h>using namespace std; const int N = 7;//物品...原创 2018-09-29 00:07:33 · 1785 阅读 · 0 评论 -
特殊的二阶魔方
时限:1000ms 内存限制:10000K 总时限:3000ms描述魔方大家应该都玩过。现在有一个特殊的二阶魔方,它只有一面是白色,其余五个面全是黑色。玩这个魔方当然也有特殊的规则,玩家只能通过六种方式去改变它,底层向左转一格(称为DL),底层向右转一格(称为DR),右侧向上转一格(称为RU),右侧向下转一格(称为RD),内侧顺时针转一格(称为C),内侧逆时针转一格(称为CC)。现给一魔...原创 2018-10-17 23:57:57 · 1229 阅读 · 0 评论 -
noj六数码
时限:1000ms内存限制:10000K 总时限:3000ms描述现有一两行三列的表格如下:A B CD E F把1、2、3、4、5、6六个数字分别填入A、B、C、D、E、F格子中,每个格子一个数字且各不相同。每种不同的填法称为一种布局。如下:1 3 52 4 6布局12 5 64 3 1布局2定义α变换如下:把A格中的数字放入B格,把B格中的数字放入E格,把E格中...转载 2020-03-07 22:08:34 · 662 阅读 · 0 评论 -
批处理作业调度问题之回溯法
1.问题描述:给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度的完成时间和。批处理作业调度问题要求对于给定的n个作业,制定最佳作业调度方案,使其完成时间和达到最小。 例:设n=3,考虑以...转载 2018-10-03 23:18:48 · 3778 阅读 · 0 评论 -
旅行售货员问题
【题目】 某售货员要到4个城市去推销商品,已知各城市之间的路程,如右图所示。请问他应该如何选定一条从城市1出发,经过每个城市一遍,最后回到城市1的路线,使得总的周游路程最小?并分析所设计算法的计算时间复杂度。【分析】 该题利用回溯法求解,此时需要确定解空间的类型:我们可以知道该解空间为一棵排列树。我们假设初始的一条路线为x,x中的值为 1,2,3,……,...转载 2018-10-03 22:54:49 · 4853 阅读 · 1 评论 -
踩气球
时限:1000ms 内存限制:10000K 总时限:3000ms描述:六一儿童节,小朋友们做踩气球游戏,气球的编号是1~100,两位小朋友各踩了一些气球,要求他们报出自己所踩气球的编号的乘积。现在需要你编一个程序来判断他们的胜负,判断的规则是这样的:如果两人都说了真话,数字大的人赢;如果两人都说了假话,数字大的人赢;如果报小数字的人说的是真话而报大数字的人说谎,则报小数字的人赢(注意:只要...原创 2018-10-03 21:29:24 · 182 阅读 · 0 评论 -
素数环
时限:1000ms 内存限制:10000K 总时限:3000ms描述:把1到20这重新排列,使得排列后的序列A满足:a. 任意相邻两个数之和是素数b. 不存在满足条件a的序列B使得:A和B的前k(0 <= k <= 19)项相同且B的第k+1项比A的第k+1项小。(即按字典序排列的第一项)输入:没有输入。输出:输出A,两个数字之间用一个空格隔开,第一个数字前...原创 2018-10-03 21:15:21 · 204 阅读 · 0 评论 -
八皇后问题(回溯)
时限:1000ms 内存限制:10000K 总时限:3000ms描述输出8皇后问题所有结果。输入没有输入。输出每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。输入样例 输出样例...原创 2018-09-26 00:22:39 · 198 阅读 · 0 评论 -
堡垒问题
时限:1000ms 内存限制:10000K 总时限:3000ms描述:城堡是一个4×4的方格,为了保卫城堡,现需要在某些格子里修建一些堡垒。城堡中的某些格子是墙,其余格子都是空格,堡垒只能建在空格里,每个堡垒都可以向上下左右四个方向射击,如果两个堡垒在同一行或同一列,且中间没有墙相隔,则两个堡垒都会把对方打掉。问对于给定的一种状态,最多能够修建几个堡垒。输入:每个测例以一个整数n(...原创 2018-09-30 21:35:16 · 1219 阅读 · 0 评论 -
分治法--线性时间选择(求第k小数)
线性时间选择问题:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,(这里给定的线性集是无序的)。 1、随机划分线性选择 线性时间选择随机划分法可以模仿随机化快速排序算法设计。基本思想是对输入数组进行递归划分,与快速排序不同的是,它只对划分出的子数组之一进行递归处理。利用随机函数产生划分基准,将数组a[p:r]划分成两个子数组...原创 2018-09-24 13:45:32 · 7691 阅读 · 1 评论 -
快速排序和二分查找及其他
快速排序:#include <stdio.h>#include <stdlib.h>void Swap(int *a,int *b){ int tmp; tmp = *a; *a = *b; *b = tmp;}void QuickSort(int a[],int left,int right){ if(left...原创 2018-06-29 15:52:00 · 501 阅读 · 1 评论 -
递归实现全排列问题
问题:有一组数R,需要输出它的全排列。R的递归可定义如下:当个数n为1时,Perm(R) = (r),其中r是集合R中唯一的元素当个数n大于1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2),(r3)Perm(R3),…,(rn)Perm(Rn)构成其中Ri = R - {ri} 即该集合中减去对应元素思路:递归地把这组数规模一个一个地缩小,如1,2,3,4...原创 2018-09-23 22:13:56 · 459 阅读 · 1 评论 -
算法时间复杂度分析
用O( )来体现算法时间复杂度的记法,我们称之为大O表示法。 算法复杂度可以从最理想情况、平均情况和最坏情况三个角度来评估,由于平均情况大多和最坏情况持平,而且评估最坏情况也可以避免后顾之忧,因此一般情况下,我们设计算法时都要直接估算最坏情况的复杂度。 大O表示法O(f(n)中的f(n)的值可以为1、n、logn、n²等,因此我们可以将O(1)、O(n)、O(logn)、O(n²)分别可以称为...原创 2018-09-06 16:24:31 · 572 阅读 · 0 评论 -
走迷宫
时限:1000ms 内存限制:10000K 总时限:3000ms描述判断是否能从迷宫的入口到达出口 输入先输入两个不超过20的正整数表示迷宫的行数m和列数n,再输入口和出口的坐标,最后分m行输入迷宫,其中1表示墙,0表示空格每个数字之间都有空格。 输出只能向上、下、左、右四个方向走若能到达,则输出"Yes",否则输出"No",结果占一行。 输入样例3 ...原创 2018-09-21 16:08:44 · 639 阅读 · 0 评论 -
穷举n位二进制数
时限:100ms 内存限制:10000K 总时限:300ms描述输入一个小于20的正整数n,要求按从小到大的顺序输出所有的n位二进制数,每个数占一行。 输入输入一个小于20的正整数n。 输出按从小到大的顺序输出所有的n位二进制数,每个数占一行。 输入样例3 输出样例000001010011100101110111#inc...原创 2018-09-21 16:10:14 · 1231 阅读 · 0 评论 -
图的m着色问题(回溯)
题目描述 给定无向连通图G=(V, E)和m种不同的颜色,用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中相邻的两个顶点有不同的颜色? 这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中每条边连接的两个顶点着不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可着色优化问题。 编程计算:给定图...原创 2018-09-28 11:51:05 · 11782 阅读 · 0 评论 -
polygon
时限:1000ms 内存限制:10000K 总时限:3000ms描述:在一个周长为10000的圆上等距分布着n个点,即这n个点是一个正n边形的顶点。现在要另加m个点到圆上,新加的m个点可以任意选择位置(可以与原有的点重合)。然后将这n+m个点中的一些点延圆周移动,最终使n+m个点均匀分布,即在一个正n+m边形的顶点上。输出最小总移动距离。输入:输入两个整数 n, m。 (2≤n≤1...原创 2018-10-12 22:05:43 · 2117 阅读 · 0 评论