算法
文章平均质量分 68
w_1106
这个作者很懒,什么都没留下…
展开
-
动态规划练习题
动态规划分析并掌握“最长公共子序列” 问题的动态规划算法求解方法;最长公共子序列问题:若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。给定2个原创 2021-01-05 22:26:09 · 450 阅读 · 0 评论 -
动态规划
动态规划1.动态规划的基本概念在学习动态规划之前,先思考这样一个问题:什么是动态规划?为什么叫动态规划?当读者在试图探索这个问题的时候,不可避免的要了解动态规划的产生背景。动态规划是由 Dynamic Programming 翻译过来的。动态规划的概念是由美国数学家R.E.Bellman等人提出的,应用于工程领域。动态规划是是求解多阶段决策过程(decision process)的最优化问题一种方法。所谓多阶段决策过程是指这样一类决策过程:它可以把一一个复杂问题按时间(或空间)分成若干个阶段,每个原创 2021-01-03 22:42:21 · 240 阅读 · 0 评论 -
分支界限法
分支界限法基本思想分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树,裁剪那些不能得到最优解的子树以提高搜索效率。搜索策略在扩展结点处,先生成其所有的儿子结点(分支),然后再从当前的活结点表中选择下一个扩展结点。为了有效地选择下一个扩展结点,以加速搜索的进程,在每一活结点处,根据限界函数估算目标函数的可能取值(优先值),并根据这些已计算出的函数值,从当前活结点表中选择一个最有利的结点(使目标函数取得极值(极大/极小)的结点)作为扩展结点,优先进行广度优先搜索,使搜索朝着解空间原创 2021-01-02 23:04:35 · 1229 阅读 · 0 评论 -
贪心算法与动态规划算法的联系与区别
贪心算法与动态规划算法的连续与区别联系1.都是一种推导算法2.都是分解成子问题来求解,都需要具有最优子结构区别1.贪心:每一步的最优解一定包含上一步的最优解,上一步之前的最优解则不作保留;动态规划:全局最优解中一定包含某个局部最优解,但不一定包含前一个局部最优解,因此需要记录之前的所有的局部最优解2.贪心:如果把所有的子问题看成一棵树的话,贪心从根出发,每次向下遍历最优子树即可(通常这个“最优”都是基于当前情况下显而易见的“最优”);这样的话,就不需要知道一个节点的所有子树情况,于是构不成一棵原创 2021-01-01 22:01:01 · 783 阅读 · 0 评论 -
矩阵链相乘问题
矩阵链相乘问题输入样例:在这里给出一组输入。例如:530 35 15 5 10 20输出样例:在这里给出相应的输出。例如:11875代码:#include <iostream>#include<stdio.h>using namespace std;long long dp[101][101];int arr[102][2];int main(){ int n; cin>>n; cin>>arr[1][0];原创 2020-12-30 22:01:03 · 102 阅读 · 0 评论 -
回溯法
1.算法实现题:整数变换问题。整数i的两种变换定义为 , (向下取整);设计一个算法求给定两个整数a和b,用最少次数的 和 变换将整数a变换为b;例如实现提示:观察f和g两个操作可知,f总是使得i变大,g总是使得i变小。因此在决定让x执行哪个操作之前可以先判断i和目标值m之间的大小关系。如果x>m,就让其执行g操作;反之,执行f操作。问题的解分为两种情况,一种是有解,即n可以通过函数变换成m;另一种是无解,即n无法通过函数变换成m。有解的情况比较容易,只需要判断最后的i是否等于m即可。如果i原创 2020-12-27 21:49:36 · 114 阅读 · 0 评论 -
贪心算法相关练习题
1、最优服务次序问题。问题描述:设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,(1<=i<=n)。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?(平均等待时间是n个顾客等待服务时间总和除以n)输入:第一行为一个正整数n,表示有n个顾客第二行为n个正整数,表示n个顾客需要的服务时间输出:最小平均等待时间。代码:#include<iostream>#include<algorithm>#include <iomanip>us原创 2020-12-13 21:52:49 · 684 阅读 · 0 评论 -
【计算机算法】月饼
【计算机算法】月饼月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5原创 2020-12-09 21:31:22 · 168 阅读 · 0 评论 -
【计算机算法】最优合并问题
【计算机算法】最优合并问题给定k 个排好序的序列, 用 2 路合并算法将这k 个序列合并成一个序列。 假设所采用的 2 路合并算法合并 2 个长度分别为m和n的序列需要m+n-1 次比较。试设 计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。 为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。输入格式:第一行有 1 个正整数k,表示有 k个待合并序列。 第二行有 k个正整数,表示 k个待合并序列的长度。输出格式:输出最多比较次数和最少比较次数。输入样例原创 2020-12-08 22:05:13 · 439 阅读 · 0 评论 -
【计算机算法】看电影
【计算机算法】看电影终于到周末了,明明是特别喜欢看电影。他想在一天内尽量多的看到完整的多部电影。 现在他把他喜欢的电影的播放时间表给你,希望你能帮他合理安排。输入格式:输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示明明喜欢的电影的总数。 接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个电影的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。 当n=0时,输入结束。输出格式:对于每组输入,输出能完整看到的电影的个数。输入样例:原创 2020-12-07 20:43:41 · 501 阅读 · 0 评论 -
【计算机算法】喷水装置
【计算机算法】喷水装置 长L米,宽W米的草坪里装有n个浇灌喷头。每个喷头都装在草坪中心线上(离两边各W/2米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头?输入格式:输入包含若干组测试数据。第一行一个整数T表示数据组数。每组数据的第一行是整数n、L和W的值,其中n≤10 000。接下来的n行,每行包含两个整数,给出一个喷头的位置和浇灌半径。如下图所示的示意图是样例输入的第一组数据所描述的情况:输出格原创 2020-12-05 21:08:00 · 262 阅读 · 0 评论 -
【二路归并算法】
【二路归并算法】两路合并排序是时间复杂度为O(n* log2 n)的排序方法。基本思想:将有n个元素的序列看成是n个长度为1的有序序列,然后两两合并序列,得到 n/2个长度为2或1的有序序列,然后在进行两两合并,直到得到一个长度为n的有序序列。(1)eg:#include<stdio.h>#define MAXSIZE 5void Merging(int *list1, int list1Size, int *list2, int list2Size){ int i, j,原创 2020-11-27 20:22:09 · 1807 阅读 · 0 评论 -
【计算机算法】装箱问题
【计算机算法】装箱问题输入样例:860 70 80 90 30 40 10 20输出样例:60 170 280 390 430 140 510 120 25代码(C++):#include <iostream>using namespace std;int main(){ int n,i; int array[1000],box[1000]; cin>>n; int sum=0; for(i=0;i<n原创 2020-11-25 22:00:19 · 467 阅读 · 0 评论 -
【计算机算法】分形的递归输出
【计算机算法】分形的递归输出分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。一个盒状分形定义如下: 度为1的盒分形为:X度为2的盒分形为:X XXX X依次类推,如果B(n-1)表示n-1度的盒分形,则n度的盒分形递归定义如下:B(n - 1) B(n - 1) B(n - 1)B(n - 1) B(n - 1)请画出度为n的盒原创 2020-11-23 18:45:56 · 761 阅读 · 0 评论 -
【计算机算法】二叉树的遍历
【计算机算法】二叉树的遍历/* * 二叉树的四种遍历方式,这里没有采用真实的指针去做, * 而是采用数组下标去模拟指针,是一种更加方便快速的方法 */#include <iostream>#include <queue> using namespace std;const int N = 10010;const int INF = -1; // 我们用一个常数来表示当前二叉树节点为空的情况 struct Node { int w; // 当前树节点的值原创 2020-11-22 21:42:48 · 237 阅读 · 0 评论 -
【计算机算法】改写二分搜索算法
【计算机算法】改写二分搜索算法题目来源:《计算机算法设计与分析》,王晓东设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。输入格式:输入有两行:第一行是n值和x值; 第二行是n个不相同的整数组成的非降序序列,每个整数之间以空格分隔。输出格式:输出小于x的最大元素的最大下标i和大于x的最小元素的最小下标j。当搜索元素在数组中时,i和j相同。 提示:若x小于全部数原创 2020-11-20 21:51:18 · 1446 阅读 · 2 评论 -
【计算机算法】二分查找
二分查找输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。输入格式:输入共三行: 第一行是n值; 第二行是n个整数; 第三行是x值。输出格式:输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。输入样例:41 2 3 41输出样例:02#include<iostream>using namespace std;#d原创 2020-11-19 21:39:45 · 2533 阅读 · 0 评论 -
【计算机算法】递归实现逆序输出整数
【计算机算法】递归实现逆序输出整数本题目要求读入1个正整数n,然后编写递归函数reverse(int n)实现将该正整数逆序输出。输入格式:输入在一行中给出1个正整数n。输出格式:对每一组输入,在一行中输出n的逆序数。输入样例:12345输出样例:54321#include<iostream>using namespace std;#define N 1000int array[N];int reverse(int n,int i){ array[i]=n%10;原创 2020-11-17 20:52:04 · 1969 阅读 · 0 评论 -
【计算机算法】 换硬币
【计算机算法】 换硬币将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?输入格式:输入在一行中给出待换的零钱数额x∈(8,100)。输入格式:要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。输入样例:13输出样例:fen5:2, fen2:1, fen1:1, total原创 2020-11-16 22:03:26 · 218 阅读 · 0 评论 -
【计算机算法】输出全排列
【计算机算法】输出全排列输入整数n(3<=n<=7),编写程序输出1,2,…,n整数的全排列,按字典序输出。输入格式:一行输入正整数n。输出格式:按字典序输出1到n的全排列。每种排列占一行,数字间无空格。输入样例:在这里给出一组输入。例如:3 输出样例:在这里给出相应的输出。例如:123 132 213 231 312 321代码:#include<iostream>using namespace std;#include<algorithm>int原创 2020-11-15 21:36:39 · 1278 阅读 · 0 评论 -
【计算机算法】 求前缀表达式的值
【计算机算法】 求前缀表达式的值算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。输入格式:输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象(运算数、运算符号)之间以空格分隔。输出格式:输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR。输入样例: + +原创 2020-11-14 21:52:10 · 1096 阅读 · 0 评论 -
【计算机算法】排序
【计算机算法】排序给定N个(长整型范围内的)整数,要求输出从小到大排序后的结果。本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下:输入格式:输出格式:在一行中输出从小到大排序后的结果,数字间以1个空格分隔,行末不得有多余空格。输入样例:114 981 10 -17 0 -20 29 50 8 43 -5输出样例:-20 -17 -5 0 4 8 10 29 43 50 981代码:#include<iostream>#include<原创 2020-11-13 21:49:16 · 138 阅读 · 0 评论 -
【计算机算法】跳一跳
【计算机算法】跳一跳微信小程序中的跳一跳相信大家都玩过。emmm???只学习不玩游戏?那就吃亏了…好好读题理解吧。 简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。 如果跳到了方块上,但没有跳到方块的中心则获得1分;跳到方块中心时,若上一次的得分为1分或这是本局游戏的第一次跳跃则此次得分为2分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将+2,+4,+6,+8…)。现在给出一个人跳一跳的全过程,请你求出他本局游戏的得分(按照原创 2020-11-12 21:46:12 · 645 阅读 · 0 评论 -
【计算机算法】利用STL比较数据大小并排序
利用STL比较数据大小并排序本题目要求读入n个整数(输入数字个数根据输入时随机确定,以输入一个非数字的值作为输入结束标志),利用STL比较数据大小并排序(由小到大升序),然后输出排序后的数据。输入格式:输入在一行中依次输入整数值,每个数字之间用空格分隔,输入数字个数根据输入时随机确定,以输入一个非数字的值作为输入结束标志。输出格式:先输出一段提示“从标准设备读入数据,直到输入是非整型数据为止”,在输入一组数字后,输出排序后的数字,在一行中由小到大依次输出所有值,数字之间用空格分隔。输入样原创 2020-11-11 19:11:44 · 461 阅读 · 0 评论 -
办事大厅排队
办事大厅排队输入格式:第一行一个数字N,表示排队信息或者查询信息条目的数量。以下N行,每行的内容有以下3种情况(1) in name表示名字为name的人员新来到办事大厅,排在队伍的最后。(in和name间存在一个空格,name是名字对应字符串,长度不超过10)。(2) out 表示当前排在最前面的人已经办理完业务,离开了(3) q 表示一次查询,请输出当前正在办理业务的人,也就是队伍的第1个人。如果当前无人办理业务,则输出“NULL”,不包括引号。输出格式:请根据以上信息,每次遇到原创 2020-11-10 21:52:56 · 596 阅读 · 1 评论