算法分析考试题

合集下载

算法考试题目及答案解析

算法考试题目及答案解析

算法考试题目及答案解析一、单项选择题1. 在算法中,以下哪个选项不是算法的特性?A. 有穷性B. 确定性C. 可行性D. 随机性答案:D解析:算法的特性包括有穷性、确定性和可行性。

有穷性指的是算法必须在执行有限步骤后终止;确定性指的是算法的每一步操作都是明确的,不存在二义性;可行性指的是算法的每一步操作都必须足够基本,以至于可以准确地执行。

随机性并不是算法的特性之一。

2. 以下哪个排序算法的时间复杂度是O(n^2)?A. 快速排序B. 归并排序C. 冒泡排序D. 堆排序答案:C解析:冒泡排序是一种简单的排序算法,其时间复杂度为O(n^2),在最坏的情况下,需要比较每一对元素。

快速排序的平均时间复杂度为O(n log n),归并排序的时间复杂度为O(n log n),堆排序的时间复杂度为O(n log n)。

3. 在图的遍历中,深度优先搜索(DFS)使用的栈是什么类型的栈?A. 后进先出栈B. 先进后出栈C. 先进先出栈D. 随机进随机出栈答案:B解析:深度优先搜索(DFS)使用的数据结构是栈,遵循的是先进后出的原则,即后进先出栈。

4. 哈希表解决冲突的方法不包括以下哪一项?A. 分离链接法B. 开放寻址法C. 链地址法D. 二分查找法答案:D解析:哈希表解决冲突的方法主要包括分离链接法、开放寻址法和链地址法。

二分查找法是一种查找算法,不是用来解决哈希表冲突的方法。

5. 以下哪个算法不是动态规划算法?A. 斐波那契数列B. 0-1背包问题C. 最短路径问题D. 快速排序答案:D解析:斐波那契数列、0-1背包问题和最短路径问题都可以使用动态规划算法来解决。

快速排序是一种排序算法,不属于动态规划算法。

二、多项选择题1. 以下哪些是算法设计中常用的数据结构?A. 数组B. 链表C. 栈D. 队列E. 树答案:ABCDE解析:数组、链表、栈、队列和树都是算法设计中常用的数据结构,它们各自有不同的特点和适用场景。

数据结构与算法分析考试试题

数据结构与算法分析考试试题

数据结构与算法分析考试试题一、选择题(共 20 小题,每小题 3 分,共 60 分)1、在一个具有 n 个元素的顺序表中,查找一个元素的平均时间复杂度为()A O(n)B O(logn)C O(nlogn)D O(n²)2、以下数据结构中,哪一个不是线性结构()A 栈B 队列C 二叉树D 线性表3、一个栈的入栈序列是 1,2,3,4,5,则栈的不可能的出栈序列是()A 5,4,3,2,1B 4,5,3,2,1C 4,3,5,1,2D 1,2,3,4,54、若一棵二叉树的先序遍历序列为 ABCDEFG,中序遍历序列为CBDAEGF,则其后序遍历序列为()A CDBGFEAB CDBFGEAC CDBAGFED BCDAGFE5、具有 n 个顶点的无向完全图的边数为()A n(n 1)B n(n 1) / 2C n(n + 1) / 2D n²6、以下排序算法中,在最坏情况下时间复杂度不是O(n²)的是()A 冒泡排序B 选择排序C 插入排序D 快速排序7、在一个长度为 n 的顺序表中,删除第 i 个元素(1≤i≤n)时,需要向前移动()个元素。

A n iB iC n i + 1D n i 18、对于一个具有 n 个顶点和 e 条边的有向图,其邻接表表示中,所有顶点的边表中边的总数为()A eB 2eC e/2D n(e 1)9、以下关于哈夫曼树的描述,错误的是()A 哈夫曼树是带权路径长度最短的二叉树B 哈夫曼树中没有度为 1 的节点C 哈夫曼树中两个权值最小的节点一定是兄弟节点D 哈夫曼树中每个节点的权值等于其左右子树权值之和10、用邻接矩阵存储一个具有 n 个顶点的无向图时,矩阵的大小为()A nB n²C (n 1)²D (n + 1)²11、下列关于堆的描述,正确的是()A 大根堆中,每个节点的值都大于其左右子节点的值B 小根堆中,每个节点的值都小于其左右子节点的值C 堆一定是完全二叉树D 以上都对12、在一个具有 n 个单元的顺序存储的循环队列中,假定 front 和rear 分别为队头指针和队尾指针,则判断队满的条件是()A (rear + 1) % n == frontB (front + 1) % n == rearC rear == frontD rear == 013、已知一个图的邻接表如下所示,从顶点 1 出发,按深度优先搜索法进行遍历,则得到的一种可能的顶点序列为()|顶点|邻接顶点|||||1|2, 3||2|4, 5||3|5||4|6||5|6||6| |A 1, 2, 4, 6, 5, 3B 1, 2, 5, 3, 4, 6C 1, 2, 3, 5, 4, 6D 1, 3, 2, 4, 5, 614、对线性表进行二分查找时,要求线性表必须()A 以顺序方式存储,且元素按值有序排列B 以顺序方式存储,且元素按值无序排列C 以链式方式存储,且元素按值有序排列D 以链式方式存储,且元素按值无序排列15、以下算法的时间复杂度为 O(nlogn)的是()A 顺序查找B 折半查找C 冒泡排序D 归并排序16、若某链表最常用的操作是在最后一个节点之后插入一个节点和删除最后一个节点,则采用()存储方式最节省时间。

电大计算机本科_算法设计与分析(期末考试复习题含答案)

电大计算机本科_算法设计与分析(期末考试复习题含答案)

1、二分搜索算法是利用( A )实现的算法。

A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是( A )。

A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解3、最大效益优先是( A )的一搜索方式。

A、分支界限法B、动态规划法C、贪心法D、回溯法4、在下列算法中有时找不到问题解的是( B )。

A、蒙特卡罗算法B、拉斯维加斯算法C、舍伍德算法D、数值概率算法5. 回溯法解旅行售货员问题时的解空间树是( A ).A、子集树B、排列树C、深度优先生成树D、广度优先生成树6.下列算法中通常以自底向上的方式求解最优解的是( B )。

A、备忘录法B、动态规划法C、贪心法D、回溯法7、衡量一个算法好坏的标准是(C )。

A 运行速度快B 占用空间少C 时间复杂度低D 代码短8、以下不可以使用分治法求解的是(D )。

A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题9。

实现循环赛日程表利用的算法是( A ).A、分治策略B、动态规划法C、贪心法D、回溯法10、下列随机算法中运行时有时候成功有时候失败的是(C )A 数值概率算法B 舍伍德算法C 拉斯维加斯算法D 蒙特卡罗算法11.下面不是分支界限法搜索方式的是( D )。

A、广度优先B、最小耗费优先C、最大效益优先D、深度优先12.下列算法中通常以深度优先方式系统搜索问题解的是( D ).A、备忘录法B、动态规划法C、贪心法D、回溯法13.备忘录方法是那种算法的变形。

( B )A、分治法B、动态规划法C、贪心法D、回溯法14.哈弗曼编码的贪心算法所需的计算时间为( B )。

A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)15.分支限界法解最大团问题时,活结点表的组织形式是( B ).A、最小堆B、最大堆C、栈D、数组16.最长公共子序列算法利用的算法是( B )。

A、分支界限法B、动态规划法C、贪心法D、回溯法17.实现棋盘覆盖算法利用的算法是( A ).A、分治法B、动态规划法C、贪心法D、回溯法18.下面是贪心算法的基本要素的是( C )。

算法分析试题.doc

算法分析试题.doc

1-1什么叫数据?什么叫数据元素?什么叫数据项?1-2什么叫数据的物理结构?什么叫数据的存储结构?什么叫数据的操作?1-3数据结构课程主要讨论哪三个方面的问题?1-4分别画岀线性结构、树结构和图结构的逻辑示意图。

1-5什么叫类型?什么叫数据类型?什么叫抽象数据类型?1-6怎样利用抽象数据类型设计大型软件?1-7什么叫算法?算法的5个性质是什么?1-8根据算法的性质解释算法和程序的区别?1-9评判算法的优劣有哪几种方法?1-10什么叫算法的时间复杂度?怎样表示算法的时间复杂度?1-11设n为已在算法前边定义的整数类型,并已知n为正整数,分析下列各算法中加下划线语句的执行次数,并给出各算法的吋间复杂度T(n)o(1)int i = 1, k = 0;while (i < n-1){k = k+ 10* i:i 二i + 1;}(2)int i = 1, k = 0;do{k 二k + l()*i:i 二i + 1;} while (i != n);(3)inti= 1J = 1;while (i <= n && j <= n){i= i+ l;j=j+ 1;}(4)int x = n; /* n > 1 */int y = 0;while(x >= (y+l)*(y+l))y++;(5)int i, j, k, x = 0;for (i = 0; i < n; i++)for(j = 0;j<i;j++)for (k = 0; k < j; k++)x = x + 2;1-12设求解同一个问题有三种算法,三种算法各白的时间复杂度分别为0(/丿,0(2”丿和0(Mg n),哪种算法最可取?为什么?1-13按增长率从小到大的顺序排列下列各纽函数:(1)2," , (3/2) “, (2/3) \ (4/3) “(2)n, n?Z2> n2Z?, n!, n"(3)lb n, nxlb n, n2-1什么叫线性表?2-2什么叫顺序存储结构?什么叫链式存储结构?2-3给出线性表的抽象数据类型定义。

算法设计与分析期末考试B卷

算法设计与分析期末考试B卷

大学期末考试试卷B 卷(算法设计与分析)一、选择题(30分,每题2分)1、下面的算法段针对不同的自然数n 作不同的处理,其中函数odd (n) 当n 是奇数时返回true ,否则返回false ,while ( n > 1) if ( odd (n) ) n = 3 * n + 1;else n = n / 2;请问该算法所需计算时间的下界是 。

A .Ω(2n ) B .Ω(nlog n ) C .Ω(n !) D .Ω(logn )2、某体育馆有一羽毛球场出租,现在总共有10位客户申请租用此羽毛球场,每个客户所租用的时间单元如下同一时刻,该羽毛球场只能租借给一位客户,请问在这10位客户里面,体育馆最多能满足 位客户的需求。

P104 A .3 B .4 C .5 D .63、当一个确定性算法在最坏情况下的计算复杂性与其在平均情况下的计算复杂性有较大差别时,可以使用 来消除或减少问题的好坏实例间的这种差别。

A .数值概率算法 B .舍伍德算法 C .拉斯维加斯算法 D .蒙特卡罗算法4、将一个正整数n 表示成一系列正整数之和, n = n 1 + n 2 + … +n k (其中,n 1≥n 2≥ … ≥n k ≥1,k ≥1)正整数n 的一个这种表示称为正整数n 的一个划分。

正整数n 的不同的划分个数总和称为正整数n 的划分数,记作p (n );另外,在正整数n 的所有不同划分中,将最大加数n1不大于m 的划分个数记作q (n ,m )。

则当n=10时,p (n )= 。

A .q (8,8) B .1 + q (9,9) P12 C .2 + q (10,8) D .A ,B ,C 都正确5、对于含有n 个元素的子集树问题,最坏情况下其解空间的叶结点数目为 。

A .n!B .2nC .2n+1-1D .∑=ni i n 1!/! P1406、在棋盘覆盖问题中,对于2k ×2k 的特殊棋盘(有一个特殊方块),所需的L 型骨牌的个数是 A 。

算法分析考试题

算法分析考试题

1. )(n T 给定数组a[0:n-1],试设计一个算法,在最坏情况下用n+[logn]-2次比较找出a[0:n-1] 中的元素的最大值和次大值. (算法分析与设计习题 2.16 ) (分治法)a 、 算法思想用分治法求最大值和次大值首先将问题划分,即将划分成长度相等的两个序列,递归求出左边的最大值次大值,再求出右边的的最大值次大值,比较左右两边,最后得出问题的解。

b 、复杂度分析:把问题划分为左右两种的情况,需要分别递归求解,时间复杂度可如下计算:有递推公式为:T(n)=1 n=1T(n)= 2T(n/2)+1 n>1所以,分治算法的时间复杂度是n+[logn]-2,当n 为奇数时,logn 取上线,当n 为偶数时,logn 取下线。

//不知道为什么会-2!C 、代码实现:#include <stdio.h>int a[100]; void maxcmax(int i,int j,int &max,int &cmax){int lmax,lcmax,rmax,rcmax;int mid;if (i==j){ max=a[i];cmax=a[i];}else if (i==j-1)if (a[i]<a[j]){max=a[j];cmax=a[i];}else{max=a[i];cmax=a[j];}else{mid=(i+j)/2;maxcmax(i,mid,lmax,lcmax);maxcmax(mid+1,j,rmax,rcmax);if(lmax>rmax)if(lcmax>rmax){max=lmax;。

cmax=lcmax;}else{max=lmax;cmax=rmax;}elseif(rcmax>lmax){if(rmax==rcmax){max=rmax;cmax=lmax;}else{max=rmax;cmax=rcmax;}}。

算法设计与分析考试题及答案

算法设计与分析考试题及答案

1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,________,__________,__________。

2.算法的复杂性有_____________和___________之分,衡量一个算法好坏的标准是______________________。

3.某一问题可用动态规划算法求解的显著特征是____________________________________。

4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y的一个最长公共子序列_____________________________。

5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。

6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。

7.以深度优先方式系统搜索问题解的算法称为_____________。

8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。

9.动态规划算法的两个基本要素是___________和___________。

10.二分搜索算法是利用_______________实现的算法。

二、综合题(50分)1.写出设计动态规划算法的主要步骤。

2.流水作业调度问题的johnson算法的思想。

3.若n=4,在机器M1和M2上加工作业i所需的时间分别为a i和b i,且(a1,a2,a3,a4)=(4,5,12,10),(b1,b2,b3,b4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。

4.使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。

算法分析与设计试题

算法分析与设计试题

一、选择题(20分)1.最长公共子序列算法利用的算法是(B )。

A、分支界限法B、动态规划法C、贪心法D、回溯法2.实现棋盘覆盖算法利用的算法是(A )。

A、分治法B、动态规划法C、贪心法D、回溯法3.下面是贪心算法的基本要素的是(C )。

A、重叠子问题B、构造最优解C、贪心选择性质D、定义最优解4.回溯法的效率不依赖于下列哪些因素( D )A.满足显约束的值的个数B. 计算约束函数的时间C. 计算限界函数的时间D. 确定解空间的时间5.下面哪种函数是回溯法中为避免无效搜索采取的策略(B )A.递归函数 B.剪枝函数C。

随机数函数 D.搜索函数6.采用最大效益优先搜索方式的算法是(A )。

A、分支界限法B、动态规划法C、贪心法D、回溯法7.贪心算法与动态规划算法的主要区别是(B )。

A、最优子结构B、贪心选择性质C、构造最优解D、定义最优解8. 实现最大子段和利用的算法是(B )。

A、分治策略B、动态规划法C、贪心法D、回溯法9.优先队列式分支限界法选取扩展结点的原则是(C )。

A、先进先出B、后进先出C、结点的优先级D、随机10.下列算法中通常以广度优先方式系统搜索问题解的是(A)。

A、分支限界法B、动态规划法C、贪心法D、回溯法二、填空题(22分每空2分)1.算法是由若干条指令组成的有穷序列,且要满足输入、输出、确定性和有限性四条性质。

2、大整数乘积算法是用分治法来设计的。

3、以广度优先或以最小耗费方式搜索问题解的算法称为分支限界法。

4、舍伍德算法总能求得问题的一个解。

5、贪心选择性质是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。

6.快速排序template<class Type>void QuickSort (Type a[], int p, int r){if (p<r) {int q=Partition(a,p,r);QuickSort (a,p,q-1); 哈密顿环问题的算法可由回溯法设计实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法分析考试题1. )(n T给定数组a[0:n-1],试设计一个算法,在最坏情况下用n+[logn]-2次比较找出a[0:n-1] 中的元素的最大值和次大值. (算法分析与设计习题2.16 ) (分治法)a、算法思想用分治法求最大值和次大值首先将问题划分,即将划分成长度相等的两个序列,递归求出左边的最大值次大值,再求出右边的的最大值次大值,比较左右两边,最后得出问题的解。

b、复杂度分析:把问题划分为左右两种的情况,需要分别递归求解,时间复杂度可如下计算:有递推公式为:T(n)=1 n=1T(n)= 2T(n/2)+1 n>1所以,分治算法的时间复杂度是n+[logn]-2,当n为奇数时,logn取上线,当n为偶数时,logn 取下线。

//不知道为什么会-2!C、代码实现:#include <stdio.h>int a[100];void maxcmax(int i,int j,int &max,int &cmax){int lmax,lcmax,rmax,rcmax; int mid;if (i==j){m ax=a[i];c max=a[i];}else if (i==j-1)i f (a[i]<a[j]){max=a[j];cmax=a[i];}e lse{max=a[i];cmax=a[j];}else{m id=(i+j)/2;m axcmax(i,mid,lmax,lcmax);m axcmax(mid+1,j,rmax,rcmax);i f(lmax>rmax)if(lcmax>rmax){max=lmax;cmax=lcmax;}else{max=lmax;cmax=rmax;}e lseif(rcmax>lmax){if(rmax==rcmax){max=rmax;cmax=lmax;}else{max=rmax;cmax=rcmax;}}else{max=rmax;cmax=lmax;}}}int main(){int n;int max,cmax;printf("输入数组长度"); scanf("%d",&n);printf("输入数组:\n"); for(int i=0;i<n;i++) {scanf("%d",&a[i]);}maxcmax(0,n-1,max,cmax);printf("最大数为%d\n",max);printf("次大数为%d\n",cmax);return 0;}C、运行结果为2.求数列的最大子段和(要求时间复杂为nlogn) (算法设计与分析吕国英清华大学出版社135页4..3.3 二分法变异) (分治法)(也可用动态规划算法参看递归王晓东计算机算法设计与分析第三版p61页)a、基本思想:用分治法求最大子段和首先将问题划分,即将一直序列划分成长度相等的两个序列,这时会出现3种情况,即①最大子段和在第一个序列,②最大子段和在第二个序列和③最大子段和在第一个序列与第二个序列之间。

然后,将3种情况的最大子段和合并,取三者之中的最大值为问题的解。

b、复杂度分析:对应划分得到的情况①和②,需要分别递归求解,对应情况③,两个并列的for循环的时间复杂度是O(n),所以有递推公式为:T(n)=1 n=1T(n)= 2T(n/2)+n-1 n>1所以,分治算法的时间复杂度是O(nlogn)c、代码实现#include<iostream.h>#define m 10int MaxSubSum(int a[],int left,int right){int sum=0;if(left==right) sum=a[left]>0?a[left]:0;else{i nt i=(left+right)/2;i nt max1=MaxSubSum(a,left,i);i nt max2=MaxSubSum(a,i+1,right);i nt sum1=0,sum2=0;f or(int j=i;j>=left;j--) {sum1=sum1+a[j];if(sum1>sum2)sum2=sum1;}i nt sum3=0,sum4=0;f or(j=i+1;j<=right;j++) {sum3=sum3+a[j];if(sum3>sum4)sum4=sum3;}s um=sum2+sum4;i f(sum<max1)sum=max1;i f(sum<max2)sum=max2;r eturn sum;}void main(){int a[m],d;cout<<"请输入元素个数"<<endl;cin>>d;cout<<"请输入元素"<<endl;for(int i=0;i<d;i++)c in>>a[i];cout<<"最大子段和为:"<<MaxSubSum(a,0,d-1)<<endl;}运行结果为:3.设X[0:n-1] 和Y[0:n-1]为两个数组,每个数组中含有n个已排好序的数。

试设计一个O时间算法,找出X和Y的2n个数的中位(log n)数。

(分治法)a、基本思想:解决问题的核心:找出将大问题分割成较小规模的相同问题的切割点,并递归定义大问题与子问题之间的关系。

确定切割点:对于两个数组,我们可以从他们中分别选取出一个中位数,称为x,y,并将两个数组的左右边界称之为aLeft,aRight,bLeft,bRight。

对比两个中位数,如果X数组中的中位数大于Y数组中的中位数,且X数组中的元素个数为偶数个,则X数组被切割为X[aLeft,x-1],Y被切割为Y[y,bRight],如果X数组的元素个数不为偶数个的话,则直接将X切割为X[aLeft,x]。

如果X数组的中位数小于Y数组的中位数,取值情况刚好相反。

递归关系:根据上面所述,对于原问题X[aLeft , aRight], Y[bLeft, bRight]。

假设切割后的子问题为X[aLeft, x-1],Y[y,bRight]。

则求解X[aLeft , aRight], Y[bLeft, bRight]问题的中位数,归结于求解子问题X[aLeft, x-1],Y[y,bRight]的中位数。

递归结束条件:当切割后得到的子问题的两个数组的长度都为1位时,整个递归结束。

b、复杂度分析:因为数组比较的范围每次缩小一半,所以有递推公式为:T(n)=1 n=1T(n)= T(n/2)+1 n>1易算出时间复杂度为)O(log nc、代码实现#include<iostream>using namespace::std;#define d 10int median(int x[],int y[],int xLeft,int xRight,int yLeft,int yRight){if(xLeft==xRight){return (x[xLeft]+y[yLeft])/2;}int xm=(xLeft+xRight)/2;int ym=(yLeft+yRight)/2;if((xLeft+xRight)%2==0){//为奇数if(x[xm]<y[ym]){median(x,y,xm,xRight,yLeft,ym);}else{median(x,y,xLeft,xm,ym,yRight);}}else{//为偶数if(x[xm]<y[ym]){median(x,y,xm+1,xRight,yLeft,ym);}else{median(x,y,xLeft,xm,ym+1,yRight);}}}int main(){int m;int a[d],b[d];cout<<"Enter dimension m:"<<endl; cin>>m;cout<<"Enter array a:"<<endl;for(int i=0;i<m;i++)cin>>a[i];cout<<"Enter array b:"<<endl;for(int j=0;j<m;j++)cin>>b[j];int mid=median(a,b,0,m-1,0,m-1); cout<<"The median is:"<<mid<<endl; return 0;}运行结果为:4.设计一个O(n*n)时间的算法,找出由n个数组成的序列最长单调递增子序列. P87页(参考P56页) (动态规划算法)a、算法思路:序列X按非递减顺序排列,形成新序列Y,问题就转变成求解X和Y的LCS。

b、时间复杂度:使用快速排序,则排序过程的时间复杂度为O (nlgn),而求两个序列的LCS的时间复杂度为O(n^2)(因为X、Y长度相等),综合可知该解法的时间复杂度为O(n^2)。

c、代码实现#include<iostream.h>#define m 10//快速排序void QuickSort(int R[],int s,int t){int i=s,j=t;int tmp;if(s<t){t mp=R[s];while(i!=j){w hile(j>i&&R[j]>=tmp)j--;R[i]=R[j];w hile(i<j&&R[i]<=tmp)i++;R[j]=R[i];}R[i]=tmp;QuickSort(R,s,i-1);QuickSort(R,i+1,t);}}//找出最长公共子序列void LCSLength(int x[],int y[],int n,int c[m][m],int b[m][m]){int i,j;for(i=0;i<n;i++)c[0][i]=0;c[i][0]=0;}for(i=0;i<n;i++)f or(j=0;j<n;j++){if(x[i]==y[j]){c[i][j]=c[i-1][j-1]+1;b[i][j]=1;}else if(c[i-1][j]>=c[i][j-1]) {c[i][j]=c[i-1][j];b[i][j]=2;}else{c[i][j]=c[i][j-1];b[i][j]=3;}}void LCS(int i,int j,int *x,int b[m][m]) {if(i<0||j<0)r eturn;if(b[i][j]==1){L CS(i-1,j-1,x,b);c out<<x[i]<<" ";}else if(b[i][j]==2)L CS(i-1,j,x,b);elseL CS(i,j-1,x,b);}void main(){int x[m],y[m],d;cout<<"请输入元素个数"<<endl; cin>>d;cout<<"请输入元素"<<endl;for(int i=0;i<d;i++){c in>>x[i];y[i]=x[i];}int c[m][m]={0},b[m][m]={0};QuickSort(x,0,d-1);LCSLength(x,y,d,c,b);cout<<"最长单调递增子序列为:"<<endl; LCS(d-1,d-1,x,b);}结果为:7.礼物分配问题. 两兄弟Alan 和Bob, 共同分配n 个礼物. 每个礼物只能分给其中的一个人,且不能分成两个.每个礼物i 的价值为vi, 为正整数.设 a 和 b 分别表示Alan 和 Bob 所收到的礼物的总价值, V=b a Vn i i +=∑=1, 为所有礼物的总价值. 为使两兄弟高兴,我们希望尽可能地均分这些礼物, 即 |a-b| 打到最小试设计-O(n*V)时间的动态规划算法,使得|a-b| 达到最小, 并求出礼物的分割集合(P77页)(动态规划算法)8.(4.7)多处最优服务问题 P131页 (贪婪算法) (与十人打水的问题一样)a 、算法思想:贪心策略如下:首先对所有服务先按服务时间从小到大进行排序,然后按照排序结果,选出最小的服务站点时间,依次安排服务。

相关文档
最新文档