枚举算法专题.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
枚举算法专题.ppt

在水平面上整齐的放着n个正 三角形,相邻两个三角形的底 边之间无空隙,如左图所示。一个小孩子想站在某个三角形i的顶端,跳到三角形j的顶端上(ij)。他总是朝着斜向45度的方向起跳,且初始水平速度v不超过一个给定值v0。在跳跃过程中,由于受到重力作用(忽略空气阻力),小孩子将沿着抛物线行进,水平运动方程为x = x0 + vt,竖直运动方程为y = y0 + vt – 0.5gt2,运动轨迹是一条上凸的抛物线。取g=10.0,(x0, y0)是起跳点坐标。 请编程求出他从每个位置起跳能到达的最远三角形的编号。注意:跳跃过程中不许碰到非起点和终点的其他三角形。 输入 第一行为两个正整数n,v0(3≤n≤10, 1≤v0≤100),表示三角形的个数和最大水平初速度。 第二行有n个正整数li(1≤li≤20),表示从左到右各个三角形的边长。 输出 输出仅一行,包括n-1个数,表示从三角形1,2,3…n-1的顶点出发能到达的最右的三角形编号。如果从某三角形出发无法达到任何三角形,相应的数为0。 1、状态:起跳点i和i点后的点j。每个状态元素的取值范围:1≤i≤n-1,i+1≤j≤n 2、约束条件的分析:判断小孩能否从i点跳到j点的方法如下: 设起点和终点间的水平距离为l,垂直距离为h。则由物理知识(已在题目中给出)有: t = l / v h = vt – 5t2 = l – 5* 。 v = sqrt(5*l*l/ (l - h)) 这个v不一定符合要求,它需要满足两个条件。 ⑴它不能大于极限速度v0,即必须有v ≤ v0 ⑵跳跃过程中不得碰到其他三角形。 如何判断顶点k是否在抛物线下方呢? (1)算出到达时间t0 = dx / v(其中dx为起点到顶点k的水平坐标增量) (2)然后算出该时刻的竖直坐标增量vt0 – 0.5gt02。如果此增量大于起点到顶点k的竖直坐标增量,则抛物线在上方。只有起点和终点之间任何一个三角形的顶点不在抛物线下方,则跳远不能完成。 枚举过程中不断将小孩所能跳到的点j调整为best。 枚举结束后,best即为最远点。 if v v0 then break;{若大于极限速度v0,则无法从三角形i起跳} ok ← true; for k ← i + 1 to j - 1 do{判断跳跃过程中是否碰到其他三角形} begin t ← (x[k] - x[i]) / v;{计算到达三角形k的时间} if (v * t - 5 * t * t) - (y[k] - y[i]) 1e-6 then begin{如果该时刻的竖直坐标增量大于起点到顶点k的竖直坐标增量,则抛物线在上方} ok ← false; break; end;{then} end;{for} 问题二:数三角(Counting Triangles) 这是一个数三角的游戏。长度为1或SQRT(2)的小木棍放在一个网格上。如图所示,有水平的,垂直的或对角的。对角放置的木棍可以交叉。 将木棍随意地放在网格上得到的图案可能不含三角形,也可能含一个或 多个三角形。如图所示, (a), (b), (c), (d)和(e)分别 含有2, 5, 12, 0, 0个三角形。 你的任务是写一个程序数出一个图案中的三角形个数。 输入格式:先输入图案中木棍的个数N。下面输入这N根木棍的位置,用两个网格坐标表示,这两个坐标分别为木棍两端的位置。网格大小不超过10?10,因此网格左下和右上的坐标分别为(0,0)和(9,9)。 思路点拨 1、所有可能的三角图案 将输入的木棍位置存入一张10?10?8的表中。 用g[x][y][d]表示网格点(x,y)在方向d上是否有木棍: g[x][y][d]=1表示有,g[x][y][d]=0表示无。 设木棍i的位置为(x[P[i][1]], y[P[i][1]])到(x[P[i][2]], y[P[i][2]]) 对于木棍i,计算?x=x[P[i][2]] – x[P[i][1]],?y=y[P[i][2]] – y[P[i][1]],一定存在d,使得DX[d]=?x,DY[d]=?y 则有木棍i 一端x[P[i][1]]][y[P[i][1]]][d]=1, 另一端 g

文档评论(0)

zhengyl + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档