ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:395.46KB ,
资源ID:17235435      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17235435.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法实验二题库二Word文档下载推荐.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法实验二题库二Word文档下载推荐.docx

1、接下来每组数据两行,分别为待测的两组字符串。每个字符串长度不大于 1000.由最长公共子序列问题的最优子结构性质可知,要找出X=和Y=的最长公共子序列,可按以下方式递归地进行:当xm=yn时,找出Xm-1和Yn-1的最长公共子序列,然后在其尾部加上xm(=yn)即可得X和Y的一个最长公共子序列。当xmyn时,必须解两个子问题,即找出Xm-1和Y的一个最长公共子序列及X和Yn-1的一个最长公共子序列。这两个公共子序列中较长者即为X和Y的一个最长公共子序列。由此递归结构容易看到最长公共子序列问题具有子问题重叠性质。例如,在计算X和Y的最长公共子序列时,可能要计算出X和Yn-1及Xm-1和Y的最长公

2、共子序列。而这两个子问题都包含一个公共子问题,即计算Xm-1和Yn-1的最长公共子序列。与矩阵连乘积最优计算次序问题类似,我们来建立子问题的最优值的递归关系。用ci,j记录序列Xi和Yj的最长公共子序列的长度。其中Xi=,Yj=。当i=0或j=0时,空序列是Xi和Yj的最长公共子序列,故ci,j=0。其他情况下,由定理可建立递归关系如下:运行结果:Question-4 The Triangle (动态规划)73 88 1 02 7 4 44 5 2 6 5在上图所示的三角形中,从顶部到底部,找一条路线,使得它的和最大。当然,每一步只能走左下或者右下。算法分析利用动态规划的基本步骤来分析,首先找

3、出最优解结构,li表示1到i层路径的最优解,则li-1亦为最优解(证明:如果li-1不为最优解,则1到i-1层有另外一条路径使得li-1为最优解,这样就会致使li路径不为最优解,矛盾)。最优解结构:这里用一位数组存储数字三角形。Question-5超级台阶 (动态规划)有一楼梯共 m 级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第 m 级,共有多少走法?注:规定从一级到一级有 0 种走法。输入数据首先包含一个整数 n(1=n=100),表示测试实例的个数,然后是 n 行数据,每行包含一个整数 m, (1=m=40), 表示楼梯的级数。输出对于每个测试实例,请输出不同走法的数量。 (

4、即有两个不同的楼梯,一个楼梯有 2 级,一个楼梯有 3 级)只能说这题有一点DP的思想。简单递归Question-6最大和 (动态规划)给定一个由整数组成二维矩阵(r*c) ,现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。例子:0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2其最大子矩阵为:9 2-4 1-1 8其元素总和为 15。第一行输入一个整数 n(0n=100),表示有 n 组测试数据;每组测试数据:第一行有两个的整数 r,c(0r,c=100) ,r、c 分别代表矩阵的行和列;随后有 r 行,每行有 c 个整数;输

5、出矩阵的最大子矩阵的元素之和。用2 维数组a1 :m1 :n表示给定的m行n列的整数矩阵。子数组ai1: i2j1 j2表示左上角和右下角行列坐标分别为(i1, j1)和(i2, j2)的子矩阵,其各元素之和记为:(1)最大子矩阵和问题的最优解即为:(2)(3)如果令:(4)那么式(4)就是我们熟悉的最大子序列和的问题。根据以上分析我们可得到最大子矩阵和问题的算法:Question-7 剑客决斗 (动态规划)在路易十三和红衣主教黎塞留当权的时代, 发生了一场决斗。 n 个人站成一个圈, 依次抽签。抽中的人和他右边的人决斗,负者出圈。这场决斗的最终结果关键取决于决斗的顺序。现书籍任意两决斗中谁能

6、胜出的信息,但“A 赢了 B”这种关系没有传递性。例如,A 比 B 强,B比 C 强,C 比 A 强。如果 A 和 B 先决斗,C 最终会赢,但如果 B 和 C 决斗在先,则最后 A会赢。显然,他们三人中的第一场决斗直接影响最终结果。假设现在 n 个人围成一个圈,按顺序编上编号 1n。一共进行 n-1 场决斗。第一场,其中一人(设 i 号)和他右边的人(即 i+1 号,若 i=n,其右边人则为 1 号) 。负者被淘汰出圈外,由他旁边的人补上他的位置。已知 n 个人之间的强弱关系(即任意两个人之间输赢关系) 。如果存在一种抽签方式使第 k 个人可能胜出, 则我们说第 k 人有可能胜出, 我们的任

7、务是根据 n 个人的强弱关系,判断可能胜出的人数。第一行是一个整数 N(1=N=20)表示测试数据的组数。第二行是一个整数 n 表示决斗的总人数。(2=500)随后的 n 行是一个 n 行 n 列的矩阵,矩阵中的第 i 行第 j 列如果为 1 表示第 i 个人与第 j 个人决斗时第 i 个人会胜出,为 0 则表示第 i 个人与第 j 个人决斗时第 i 个人会失败。对于每组测试数据,输出可能胜出的人数,每组输出占一行。动态规划(弗洛伊德),可以把一圈人从x分为两端都是x的一条线,x向中间打若最终x能遇到x则说明x可以取得胜利, 中间得到meetij的转移方程有点像弗洛伊德算法, 从中间找可以作为

8、媒介的点, 然后更新meet数组。因为是在圈里所以要注意%操作。Question-8最长上升子序列问题 (动态规划)有一个长为 n 的数列 a0,a1,an-1。请求出这个序列中最长的上升子序列的长度。上升子序列指的是对于任意的 ij 都满足 aiaj 的子序列。 (1n1000,0ai1000000) 。第一行为 n,下面一行为 a0an-1。最长上升子序列的长度。我们依次遍历整个序列,每一次求出从第一个数到当前这个数的最长上升子序列,直至遍历到最后一个数字为止,然后再取dp数组里最大的那个即为整个序列的最长上升子序列。我们用dpi来存放序列1-i的最长上升子序列的长度,那么dpi=max(

9、dpj)+1,(j1, i-1); 显然dp1=1,我们从i=2开始遍历后面的元素即可。Question-9独木舟上的旅行 (贪婪法)进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。一条独木舟最多只能乘坐两个人, 且乘客的总重量不能超过独木舟的最大承载量。 我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数。现在请写一个程序,读入独木舟的最大承载量、旅客数目和每位旅客的重量。根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果。第一行输入 s,表示测试数据的组数;每组数据的第一行包括两个整数 w,n,80=w=200,1=300,w

10、为一条独木舟的最大承载量,n 为人数;接下来的一组数据为每个人的重量(不能大于船的承载量)。每组人数所需要的最少独木舟的条数。先把各个人的体重排序,然后计算最重的人和最轻的人能否同乘一条舟,如果不能,则最重的人就要单独乘坐一条舟,再求最轻的和第二重的人的和,依次比较。Question-10背包问题(贪心算法)现在有很多物品(它们是可以分割的) ,我们知道它们每个物品的单位重量的价值 v 和重量w(1=v,w=10) ;如果给你一个背包它能容纳的重量为 m(10=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。第一行输入一个正整数 n(1=5),表示有 n 组测试数据;随后

11、有 n 测试数据,每组测试数据的第一行有两个正整数 s,m(1=s=10);s 表示有 s 个物品。接下来的 s 行每行有两个正整数 v,w。输出每组测试数据中背包内的物品的价值和,每次输出占一行。贪心原理,要求背包物品总价值最大,故尽可能多存放价值大的物品;如图 题目中给出的例子, 背包可容纳重量15,故先放价值最大的A,将10斤A全部放入背包,然后放入价值次大的C,此时背包容纳量剩下15-10=5,而C还有9斤,因此剩下的全放C,总价值=(10*5)+(5*3)=65。Question-11田忌赛马(动规中的贪心算法)田忌赛马的故事大家应该都听过吧。田忌经常与齐国众公子赛马,设重金赌注。孙

12、膑发现他们的马脚力都差不多,马可分为上、中、下三等。于是孙膑对田忌说:“您只管下大赌注,我能让您取胜。”田忌相信并答应了他,与齐王和诸公子用千金来赌注。比赛即将开始,孙膑说:“现在用您的下等马对付他们的上等马,拿您的上等马对付他们的中等马, 拿您的中等马对付他们的下等马。 ”已经比了三场比赛, 田忌一场败而两场胜,最终赢得齐王的千金赌注。现在题目的要求是这样的,给出田忌 n 匹马的速度,再给出公子 n 匹马的速度,运用上述思想,求田忌最多能赢几场比赛。 我们规定,赢一场可得200两黄金,输一场就扣200量黄金。平局不得也不扣。求田忌最多能赢多少黄金。测试数据有多个。每组测试数据的第一行是为 n

13、 的正整数。(1=1000),接下来的两行为马的速度。第一行为田忌的 n 匹马的速度,第二行为公子的 n 匹马的速度。对于每一个测试用例,每行输出一个数,该数为田忌所能赢的最多的黄金数。1 如果田忌的慢马比齐王的慢马快,直接比赛。赢的代价小!2 如果田忌的慢马比齐王的慢马慢,让他和齐王的快马比赛。输的值!3 如果田忌的慢马的速度等于齐王的慢马 1 )如果田忌的快马比齐王的快马快 ,直接比赛。赢! 2 )如果田忌的慢马比齐王的快马慢,那让他和齐王最快的马比赛。 3 )其他情况,直接退出。统计比赛结果,算钱!Question-12硬币问题(贪心算法)有1元、5元、10元、50元、100元、500元

14、的硬币各 C 1 、C 5 、C 10 、C 50 、C 100 、C 500 枚。现在要用这些硬币来支付 A 元、 最少需要多少枚硬币?假定本题至少存在一种支付方案。第一行 n 为测试数据的组数。以下各行依次为:C 1 C 5 C 10 C 50 C 100 C 500 A每行输出需要最少的硬币数由贪心算法可知尽量用大面值的硬币组合来找钱,可以使使用的硬币最少。而贪心算法对最少硬币问题的解决总是可以得到最优解很好的近似解。本算法就是用贪心策略枚举出所有近似最优解,然后从中寻找到问题的最优解寻找近似最优解群(1)将硬币依面值大小排序(2)按面值种类划分不同情况有多少种面值就划分多少种情况.每种

15、情况的第一枚硬币面值各不一样,其后对剩余的硬币按面值从大到小排列。源代码Question-2#include using namespace std;#define MAX 100/定义每组比赛成员的结构类型typedef struct node int p1; int p2;team;team XMAXMAX/2+1;/X为解向量 xij表示第i天 第j场次现在赛的情况 xij.p1 和xij.p2int num,tMAX;/num表示 比赛人数 t分别表示每天比赛的场次数初始化为0void Init() coutnum; for(int i=0;iMAX;i+)ti=0;void f(in

16、t from,int to, int day)/编号为from到to的n(n=to-from+1)个人从第day天开始比赛,全部安排下去的函数 int n=to-from+1,i,k; if(n2) /超过两人,才分成两组 int mid=from+n/2-1; f(from,mid,day); /组内比赛 f(mid+1,to,day); /以下是组间比赛 for(k=0;k=n/2;k+) /在后n/2天内,分别与组2内队员(j+i+k)%(n/2)进行组间比赛 for(i=0;i+) Xn/2+k+tn/2+k.p1 = from+i; Xn/2+ktn/2+k.p2 = (i+k)%(

17、n/2+1)+mid+1; void Output()比赛安排如下:n for(int i=1;=num;第天:endl; for(int j=1;j=ti;j+)(Xij.p1,Xij.p2) int main() int z; Init();/初始化 f(1,num,1);/从1到num个人 从第一天开始 调用函数 Output();输入任意字符结束.z; return 0;Question-3#include#define N 100int aNN;char s1N,s2N;int max(int a,int b) return a=b?a:b; int count,i,j,length

18、1,length2,z;请输入需要测试几组数据:count; while(count-) int count=1; cout请输入第counts2+1; length1=strlen(s1+1); length2=strlen(s2+1);=length1;i+) ai0=0; =length2; a0i=0; for(i=1; for(j=1; if(s1i=s2j) aij=ai-1j-1+1; else aij=max(ai-1j,aij-1);最长公共子序列长度为:alength1length2endln) for(i=1;=n; for(j=1;=i;j+) aij; dpij=0;

19、 dp11=a11; for(i=2;i+) dpi1=ai1+dpi-11; for(j=2;j+) min=dpi-1j-1dpi-1j?dpi-1j-1:dpi-1j; dpij=aij+min; int ans=0; if(ansdpni) ans=dpni;自上而下路径最大和为:ans/最大和 Question-5int main() int N;coutN;_int64 array1024;memset(array,0,1024);请输入每个实例的楼梯级数:while (N-) int sum=0;sum;array2=1;array1=1;for(int index=3;inde

20、x=sum;index+) arrayindex=arrayindex-1+arrayindex-2; arraysumstring.hstringint a102102; int i,j,k,m,r,c,max,temp,z,n;请输入待测矩阵个数n:n; for(int count=0;count+)输入第count+1 aij=aij+ai-1j; for(i=1,m=a10; for(j=i; for(k=max=0;k+) temp=ajk-ai-1k; max=(max=0?max:0)+temp; m=maxm?m;矩阵的最大和为:mQuestion-7stdlib.hint fight501501, meet501501, n; /fightij: i与j PK 能否获胜, meetij:i,j能否遇到 printf(请输入测试数据的组数和决斗的总人数: int i, j, k, m, t, cnt

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1