![](https://img-blog.csdnimg.cn/20190913124401324.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法习题
文章平均质量分 89
算法练习
德林恩宝
计算机科学与技术专业研究生,研究方向为计算机视觉[E-mail:baolliu@foxmail.com]
展开
-
算法设计与分析 循环赛设计和实现
算法设计与分析之循环赛日程表目录一. 设计任务描述 1二. 题目分析 1三. 软件开发环境 1四. 总体方案设计说明 1五. 执行结果与测试情况说明 5六. 附件:源代码 6一.设计任务描述设有n个运动员要进行网球循环赛.设计 一个满足下列条件的比赛日程表: – 每个选手必须与其他n-1个选手各赛一次;– 每个选手一天只能赛一次;– 当n是偶数时,循环赛进行n-1天.– 当n是奇数时,循环赛进行n天.二.题目分析根据所提要求,需要每一位选手与另外的所有的选手进行一次比赛,原创 2021-01-09 18:10:11 · 1003 阅读 · 0 评论 -
北邮 招聘矿工(记忆化 or dp)
题目现在你的任务是从金字塔的顶端向金字塔的底端收集钻石,并且尽可能收集价值高的钻石,但是只能从一块砖斜向左下或斜向右下走到另一块砖上,如从上图从用红色A标记的砖走向用蓝色B标记的砖上。富翁希望heimengnan找到一个收集最高价值钻石的路线,并且把可能收集的最大价值告诉富翁。heimengnan想了半天也没想出好方法,聪明的你能帮助他吗?分析首先查看深度搜索的过程(如下图),我们可以发现每一条路径上的值都有重复计算的值,那么采取记忆化搜索即可。我们将上述结构存储为以下形式那么原图每一个点原创 2020-10-25 10:27:27 · 309 阅读 · 2 评论 -
线性规划网络流问题总结
线性规划问题线性规划可见单纯形算法网络流:源点与汇点的流量和是相等的网络最大流是指在满足容量约束和流量守恒的条件下,在流网络中找到一个净输出最大的网络流求解最大网络流增广路算法主体实流网络和残余网络:实流网络只标记每条边的实际流量,而残余网络中,与网络边同向边是可增量,反向边是实际流量可增广路是一条从源点到汇点的简单路径而求解最大流是在残余网络中找到增广路,然后在...原创 2020-01-30 22:03:58 · 1944 阅读 · 0 评论 -
Isap --最大收益问题
题目描述永乐理工大学的实验室计划了一系列实验项目,这些实验项目需要不同的实验仪器,而配置仪器需要费用,但实验也会产生经济效益。请设计一个算法,如何才能有最大净收益?思路分析模型归纳为二分图匹配模型,假设实验项目为E = {E1,E2,E3,…,Ei},仪器为{I1,I2,I3,…,Ii},那么假设配置仪器的费用使用Ci表示,经济收益用Pi表示,那么,我们利用二分图实现该问题,首先源点与汇...原创 2020-01-29 14:12:30 · 258 阅读 · 0 评论 -
线性规划 --圆桌问题
假期 2020.01.28题目描述有一个国际会议,很多国家需要参加,每一个国家的代表团的人数不一样,每一个会议桌可坐的人数也不一样,为了充分交流,同一个国家的不要做在同一桌上,设计算法实现最佳的座位安排方案。思路解析模型是网络问题,二分图匹配问题。与线性规划 --配对方案问题相似,参考请见该博文代码解析#include<iostream>#include<a...原创 2020-01-28 13:49:20 · 409 阅读 · 0 评论 -
匈牙利算法 -- 匹配问题
假期 2020.01.27匈牙利算法(Hungarian algorithm)介绍核心:寻找增广路径,用增广路径求二分图最大匹配的算法二分图: 二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二...原创 2020-01-27 22:36:08 · 545 阅读 · 0 评论 -
线性规划 --配对方案问题
2020.01.27题目描述某公司存在分工问题,一定数量的女员工与男员工搭配,如何搭配才能实现人员的最大利益,即最大匹配问题。思路解析该问题最初如图,并且存在某些人不能搭配的问题,只考虑能搭配男女之间的搭配其实该问题也相当于一个网络问题,类似容易想到该问题的解决方案,如下图,增加一个源点0和汇点10那么剩下的问题就是如何解决实现的问题,见下一步算法分析;算法分析那么...原创 2020-01-27 11:51:24 · 594 阅读 · 0 评论 -
线性规划--最小费用最大流
假期 2020.01.24题目描述在网络布线的工程中,有许多电缆,而电缆的粗细不同,流量与费用也不一样,那么如何安排才能获得费用最小且流量最大的网络呢?思路分析因为要满足两个条件,那么我们可从两大方面入手:费用最小,我们可以先找到费用最小的网路线,然后在该路径上面增加流量到最大值即可。也可以先寻找最大流量,然后找负值的圈,因为这样子可以在一定程度上减少费用,直到减少到最小即可,...原创 2020-01-26 01:05:57 · 1741 阅读 · 0 评论 -
线性规划--最大网络流
假期 2020.01.24思路分析其实该问题是离散数学中了解到的最大网络流问题,借助最短增广路算法即可解决该问题。而最短增广路算法是代码解析#include<iostream>#include<algorithm>#include<iomanip>#include<queue>using namespace std;...原创 2020-01-24 16:39:19 · 2836 阅读 · 0 评论 -
分支界限法--最优工程布线
#include<iostream>#include<algorithm>#include<queue>using namespace std;constexpr auto Max_size = 100;int map[Max_size][Max_size];//地图int shortest_dist;//最优值struct Position {...原创 2020-01-23 23:55:17 · 792 阅读 · 0 评论 -
分支界限算法--旅行商问题2
假期 2020.01.22题目描述见回溯算法–旅行商问题1算法分析此篇采用分支界限算法解决该问题,相比较前一篇的回溯算法–旅行商问题1,此处使用Bfs搜索加优先队列的方式。设置二维数组存储关系初始化解向量,即选择方案都为零,并且将最优值赋值为无穷定义优先队列:int operator <(const Node& a, const Node& b)//...原创 2020-01-23 00:16:04 · 720 阅读 · 0 评论 -
分支界限法--01背包问题
假期 2020.01.22题目描述仍然是 0 - 1背包问题。详细描述请见回溯算法–01背包问题算法分析此处采用分支界限算法,即bfs算法实现解决该问题,并且采用优先队列的存储方式。存储结构,采用构造函数的目的是便于赋值,并且有两个重载函数,第一个是初始化数组,第二个是便于赋值。struct Node {//每一个节点的信息,其中包括背包的相关信息 int cp, rp;...原创 2020-01-22 14:39:41 · 985 阅读 · 0 评论 -
回溯算法--n皇后问题
假期 2020.01.21题目描述分析见本博主博文图解八皇后问题(递归),此处只提供另一种写法。代码解析#include<iostream>#include<algorithm>using namespace std;const int Max_size = 100;int row_total,line_total;//行,列总数int line_c...原创 2020-01-21 12:03:17 · 283 阅读 · 0 评论 -
回溯算法--地图着色
假期 2020.01.21题目描述有一张地图,如何使得相邻区域颜色不一样,而使用m种颜色将地图全部着色的方案个数。思路分析回溯算法的典型运用算法分析按照回溯算法的思想,我们一开始将节点确定第一一种颜色,然后进行与前面的和该节点相邻节点进行颜色比较,检测是否相同,若相同,就尝试下一种颜色,否则,继续下一个节点的颜色着色。知道所有节点颜色都已着上,那么输出该方案即可。或者请看的本博主...原创 2020-01-21 11:18:18 · 2470 阅读 · 3 评论 -
回溯算法--最大完全子图
假期 2020.01.20题目描述从一个给定的图的关系中,找出其中最大的完全子图。思路分析一句话,回溯就搞定了。如果需要详细分析,请见本博主博文回溯算法–01背包问题,与此问题类似。代码解析#include<iostream>#include<algorithm>using namespace std;#define Max_size 100in...原创 2020-01-20 18:42:50 · 1490 阅读 · 0 评论 -
回溯算法--01背包问题
假期 2020.01.20题目描述0-1背包问题一般描述为:给定n种物品和一个背包。物品i的重量是w(i),其价值为v(i),背包的容量为c。问应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? 注: 每个物品只能使用一次。思路分析这次分析01背包问题,采用回溯的方法实现。回溯用法简单的来说,回溯就是采用DFS然后加上一个复原的操作,即从初始状态出发,然后按照深度优...原创 2020-01-20 16:53:47 · 4039 阅读 · 1 评论 -
动态规划--最优二叉搜索树
假期 2020.01.19题目描述最优二叉搜索树简单说来,就是使查找的过程消耗的次数最小,即大数据存储与查找方面的较优性能的算法。此处举例数字的存储与查找,如下图:其中pi为搜索概率,qi为不成功概率;思路分析对于寻找最优问题的算法,动态规划一直都是比较好的算法,这儿也是采用动态规划的算法实现该问题的解决。动态规划问题,一般是需要判断问题时候有最优子结构,那么此处设存在序列{s...原创 2020-01-19 18:11:51 · 2180 阅读 · 0 评论 -
0-1背包问题(不可拆分问题)
假期 2020.01.18相关摘要0-1背包问题是一个经典的NP-hard组合优化问题,现实生活中的很多问题都可以以它为模型。本博文从动态规划的角度进行问题的分析,分析了0-1背包问题的数学模型,刻划了最优解的结构特征,建立了求最优值的递归关系式。题目描述0-1背包问题一般描述为:给定n种物品和一个背包。物品i的重量是w(i),其价值为v(i),背包的容量为c。问应该如何选择装入背包...原创 2020-01-18 17:17:38 · 1224 阅读 · 0 评论 -
动态规划--石子合并的拓展问题
假期 2020.01.17题目描述一个圆形操场周围摆放着n堆石子,现要将石子有序的合并成一堆,规定每次只能移动相邻的两堆石子合并,合并花费为新合成的一堆石子的数量,求将这N堆石子合并成一堆的总花费(最小或最大)。与此相似问题求解,请点击了解详情动态规划–石子合并思路解答这个问题其实是挺好理解的,但是如何转化是一个问题。一个圆形的摆放方式很明显是每一堆都是左右有相邻的堆的存在,那么为了...原创 2020-01-17 17:06:26 · 331 阅读 · 0 评论 -
动态规划--石子合并
假期 2020.01.15题目描述沿着一条直线,摆放N堆石子,每一堆的石子的数目不一,规定每次只能移动相邻的两堆石子合并,合并花费为新合成的一堆石子的数量,求将这N堆石子合并成一堆的总花费的最大值以及最小值。问题分析这个问题考虑后,可以有两种方法解决,一种是采用贪心算法解决问题,一种是采取动态规划的问题解决问题,但是经过验证可知,贪心算法并不能准确计算出最大值与最小值,因此,此处采用...原创 2020-01-15 17:07:11 · 494 阅读 · 0 评论 -
动态规划--最优三角部分
凸多边形相关定义凸多边形的三角剖分:将凸多边形分割成互不相交的三角形的弦的集合T。最优剖分:给定凸多边形P,以及定义在由多边形的边和弦组成的三角形上的权函数w。要求确定该凸多边形的三角剖分,使得该三角剖分中诸三角形上权之和为最小。如下图的划分第一幅图:从V3开始的划分,有{v1v3,v3v0,v3v6,v4v6};从V1开始的划分,有{v1v3,v1v4,v4v6,v1v6};这就是两种形式...原创 2020-01-13 14:41:02 · 1109 阅读 · 1 评论 -
leetcode--5080. 查找两棵二叉搜索树之和
题目描述(题目以及图片来源于Leetcode-2019-第 10 场双周赛第二题)给出两棵二叉搜索树,请你从两棵树中各找出一个节点,使得这两个节点的值之和等于目标值Target。如果可以找到返回 True,否则返回 False。输入:root1 = [2,1,4], root2 = [1,0,3], target = 5输出:true解释:2 加 3 和为 5 。输入:root1 ...原创 2020-01-10 14:12:53 · 231 阅读 · 0 评论 -
简单计算星期公式运用
计算星期常用公式:公式解读:N = 所求年份;c = 年份的前两位; y = 年份的后两位;m = 月份;k = 几日;需要注意的是 m实际上为所求月份 - 2:m = m - 2;运用:代码详解:#include<stdio.h>int main(){ int year = 0,month = 0,day = 0; scanf("%d %d %d",&...原创 2020-01-10 14:11:33 · 1249 阅读 · 0 评论 -
初步认识遗传算法
声明:本文转载自:作者:火星十一郎出处:http://www.cnblogs.com/hxsyl/本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.早上再看一个APP推荐的文章,发现的。(1)初识遗传算法遗传算法,模拟达尔文进化论的自然选择和遗传学机理的生物进化过程的计算模型,一种选择不断选择优...转载 2019-12-09 10:55:32 · 190 阅读 · 0 评论 -
工厂最大效益--单纯性算法
运气好不好,我学了运筹学,没选到数学建模,但是我觉得运筹学作为一门比较接近优化各种算法的学科,我还是比较喜欢的,下面记录的是我在运筹学第一章中学习的单纯性算法的运用。此处不详细讲解单纯性算法原理了,附上链接(百度百科-单纯性算法)单纯性算法概念:单纯形法是一种迭代算法,其基本原理及主要步骤是:首先设法找到一个(初始)基可行解,然后再根据最优性理论判断这个基可行解是否最优解。若是最优解,则输...原创 2019-10-25 02:15:38 · 2615 阅读 · 2 评论 -
Leetcode-5099. 验证回文字符串 III
题目描述Leetcode-2019-第 10 场双周赛第四题给出一个字符串 s 和一个整数 k,请你帮忙判断这个字符串是不是一个「K 回文」。所谓「K 回文」:如果可以通过从字符串中删去最多 k 个字符将其转换为回文,那么这个字符串就是一个「K 回文」。示例输入:s = “abcdeca”, k = 2输出:true解释:删除字符 “b” 和 “e”。提示:1 <= s.l...原创 2019-10-07 14:11:50 · 256 阅读 · 0 评论 -
过河问题
题目描述:某人带了一条狗、一只鸡和一筐菜过河,因船小,每次只能带一样东西过河。若单独留下狗和鸡,则狗会吃鸡;若单独留下鸡和菜,则鸡会吃菜。试问他如何过河?思路解答:这个刚开始我尝试运用c++的string+递归来实现该问题,结果发现,陷于了死循环,暂时没有想到修改的好主意,只好用老师给的现成的代码实现了。此处我就发现如何设置一个存储的方式是一个都么重要的事情,老师采用的是两个数组,分别代表...原创 2019-09-27 16:31:41 · 439 阅读 · 0 评论 -
老鼠走迷宫问题(堆栈+链表解决+命令行+动画版(ege))
老鼠走迷宫问题题目描述堆栈的应用有一个相当有趣的问题,就是实验心理学中有名的“老鼠走迷宫”问题。老鼠走迷宫问题的陈述是:假设把只大老 鼠放在一个没有盖子的大迷宫盒的入口处, 盒中有许多墙使得大部分的路径都被挡住而无法前进。老鼠可以按照尝试错误的方法找到出口。不过,这只老鼠必须具备走错路时就会退回来并把走过的路记下来,避免下次重复走同样的路,就这样直到找到出口为止。简单来说,老鼠行进时,必须遵...原创 2019-07-25 01:10:58 · 4005 阅读 · 2 评论 -
01背包问题(不可分割型)
题目描述有 N 件物品和一个容量为 V 的背包。第 i 件物品的体积是 c [ i ],价值是 w [ i ] 。求解将哪些物品装入背包可使价值总和最大。思路分析这个是一个很老的问题了,很多人应该知道了,就不那么详细的介绍了。这个问题,我们可以这样思考,一开始比如给当一个背包的空间是 10,我们仅有的物品的个数是 5 个,满足(value,weight):{(1 , 2 ), ( 2 ,...原创 2019-10-06 16:10:05 · 917 阅读 · 0 评论 -
Leetcode 22. 括号生成
题目描述(来源:力扣(LeetCode))给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]思路分析回溯算法的运用:第一点,明确匹配的时候左括号的数量一定要小于等于右括号的数量;第二点,左括号首先达到输...原创 2019-10-04 11:18:10 · 163 阅读 · 0 评论 -
剪花布条(KMP)
Problem Description一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?Input输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则...原创 2019-09-06 23:36:54 · 197 阅读 · 0 评论 -
畅通工程(Prim算法)
Problem Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。Input测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随...原创 2019-09-02 20:27:22 · 464 阅读 · 0 评论 -
分治算法(与递归归并排序和二分查找)
主要思想:当要处理的数据非常多的时候,我们可以把众多的问题先分解成几个小的问题,找到求出这几个小问题的方法之后呢,再找到合适的方法,将这些子问题的解再组合成求整个问题的解法,如果这些子问题还是比较大,难以解决,可以再把他们分成几个更小的问题进行求解,依此类推,直至可以直接求出解为止。一般具有一下特征的问题可以使用分治法来解决:求解的问题分到一定的规模就可以很容易的求解;求解问题时,可以分为...原创 2019-05-05 20:44:54 · 1438 阅读 · 0 评论 -
贪心算法
#贪心算法讲解贪心算法定义:**即通过将每次的数据进行对比,每次找出最优解(局部最优解),希望最后找到全局的最优解。**贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。贪心算法事例表格表示,如下(五个活动占用某个场所,但只能在1—10的时间点进行,如何安排才会有尽量多的活动被举行。用co...原创 2019-02-27 12:42:20 · 308 阅读 · 0 评论 -
试探法算法思想
示例一彩票的组合问题(7位)解题思路:原创 2019-05-07 15:20:07 · 471 阅读 · 0 评论 -
04-树5 Root of AVL Tree 平衡树调整
(题目来源于中国大学MOOC-陈越、何钦铭-数据结构-2019夏)An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they diffe...原创 2019-08-01 01:11:21 · 197 阅读 · 0 评论 -
(浙大-19-夏-数据结构学习笔记)03-树1 树的同构问题
定义: 给定两棵树T1和T2。如果T1可以通过若干次的左右孩子的互换就变成T2,那么我们继承这两棵树是同构的。注意: 这里强调的树,在判断的时候,其实可以相互比较每层的每一个节点的孩子节点及其下一代有无是否相同判断。如图:以上两个就是同构的树...原创 2019-07-28 23:15:20 · 277 阅读 · 0 评论 -
OI赛题 汽水瓶
题目描述(来源于dotcpp编程网)以前看见的,没有写,最近看到了,就顺便写了。思路解答:在面对这道题的时候,我们应该注重这道题的方法,规律性。因为换东西啊,肯定是有技巧的吧。仔细分析题目:你会发现其实题目给了我们在面对解决这儿问题的模拟情形,如果超过三瓶,那肯定是先将能换的换掉,余下的数量是小于3的。如果剩下的瓶数是2瓶,那么可以向商家借一瓶,喝完之后凑齐三瓶再抵掉就行了。#includ...原创 2019-07-11 16:49:12 · 264 阅读 · 0 评论 -
(浙大-19-夏-数据结构学习笔记前言)最长子列和问题
给定N个整数的序列{A1,A2,A3,A4…Ak},求下列函数最大值算法一(暴力)T(N) = O(N^3)int MAXsubseqSUM(int num[],int n){ int Maxsum,Thissum; int i = 0,j , k ; Maxsum=Thissum=0; for( i = 0; i <= n-1; i++)//子列开始的左端的位置 ...原创 2019-07-15 17:58:51 · 105 阅读 · 0 评论 -
c语言 最近点对问题(分治法+递归)
Problem DescriptionHave you ever played quoit in a playground? Quoit is a game in which flat rings are pitched at some toys, with all the toys encircled awarded.In the field of Cyberground, the posi...原创 2019-07-14 21:26:28 · 14195 阅读 · 16 评论